关于Java中方法调用时参数的传递方式是值传递对于基本数据类型是很容易理解,传过去后不管你怎么操作,都不会改变原来的值。
但是对于传递的是对象引用时,通常会想到为什么我传了个对象引用A过去,然后在方法里面通过这个传递过去的对象引用来改变对象的属性A.Name,之后在原来的函数里面打印对象的属性,发现确实改变了,这会让人有点迷惑,因为如果是值传递的话,应该不管在调用函数中怎么改变,都不会对原来的值产生影响才对呀。
原因就在于传过的是个存储在内存空间中的内存地址,是指向对象的地址,例如0x0001324这种,而且传过去的不是引用A本身,而是A的一个内存中的副本B。所以说java是值传递,而且当传递的是对象引用的时候可以改变对象的值。
但是当传递引用副本B过去之后,在调用函数里面不管怎么对副本B操作,都跟原来的对象引用无关,当函数结束时,B会被释放内存,所以对其本身进行操作没有任何意义。例如将B指向其他对象,到时候你回到原函数时,调用函数已经结束,即副本B也被释放,相当于没有对对象进行任何的改变,你调用A.Name,仍然是原来的对象属性。
但是你在方法调用过程中传过去的确确实实是个值,即引用的副本,而不是直接将引用传过去。