方法参数传递.png
    传值引用(值传递)**
    在传值调用中,实际参数先被求值,然后其值通过复制,被传递给被调函数的形式参数。因为形式参数拿到的只是一个”局部拷贝”,所以如果在被调函数中改变了形式参数的值,并不会改变实际参数的值。

    传引用调用(引用传递)
    在传引用调用中,传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。因为传递的是引用,所以,如果在被调函数中改变了形式参数的值,改变对于调用者来说是可见的。

    传共享对象调用(共享对象传递)
    传共享对象调用中,先获取到实际参数的地址,然后将其复制,并把该地址的拷贝传递给被调函数的形式参数。因为参数的地址都指向同一个对象,所以我们称也之为”传共享对象”,所以,如果在被调函数中改变了形式参数的值,调用者是可以看到这种变化的。

    传值调用与传共享对象调用是指在调用函数时将实际参数 复制 一份传递到函数中
    传引用调用是指在调用函数时将实际参数的引用 直接 传递到函数中

    相当于你有一把钥匙 你朋友想去你家 如果直接把钥匙给他 就是引用传递
    但若是你复刻了一把钥匙给他 自己的钥匙还在自己手里 这就是值传递

    Java中的求值求值策略就是传共享对象调用 但因为传共享对象调用这个词不常用
    所以通常会说 Java是传值调用 因为传共享对象调用其实就是传值调用的特例
    绝不能认为Java中有引用传递

    既然传共享对象调用是传值调用的特例 但为什么传共享对象调用的值会发生变化
    实际上这两者并不冲突 传共享对象调用传递是通过复刻的方式把引用关系传递了
    相当于你复刻了一把钥匙给你的朋友 钥匙就相当于引用 通过钥匙找到你家 把家里面的内容改了
    那么你回到家也会发现家里的内容发生了改变 但是对你手上的钥匙是没有受到影响的
    即你手里的钥匙和你朋友手中复刻的钥匙都指向了同一个共享对象 就是你家
    但若是传递时改变了引用 那么就不会对原来的对象有任何影响 相当于钥匙被改掉了 通过钥匙找到的是另外一家