Java 方法参数的传递

Java 方法参数的传递

Java 方法参数的传递

Java 方法参数的传递

讲解:

1、基本数据类型做参数

当执行23行时,栈里生成了一块存放小米的区域。

Java 方法参数的传递

当执行28时,传入了一个name的复制品,方法里调用的name都是复制品

当执行42时,复制的name原来等于小米,现在等于了小红,而方法外的原型name依旧等于小米。

总结:如果传入的name是基本数据类型, 实际传入的是该类型的一个复制品,而原型依旧在 updataName方法外且值不会因为 updataName方法是否执行而发生任何改变。可以把testone()里的name当成原件,updataName方法里的name是原件的复印件,修改复印件,原件不会有任何的变化

2、New出来的对象引用

执行25行,栈里生成了一个引用p,堆里生成了一个person对象,p指向了person

Java 方法参数的传递

执行26,26时给堆里的person对象两个属性赋值。

执行28时,将p的复制引用p传入到方法里。这是栈里生成了一个person对象第二个引用p,也可以理解为第一个p的复制。两个p都指向同一个person对象。

Java 方法参数的传递

当执行44,45时,使用复制的p修改了person对象的属性值。

当执行48时,堆里生成了第二个person对象。复制的p指向对象发生了改变,指向了第二个person对象

Java 方法参数的传递

当执行49,50时,复制的p给第二个person对象属性赋值了。而第一个对象的值保持不变。

总结:传入到方法里的是一个对象的引用时,只要引用指向的对象没有发生改变,引用无论是在哪里修改对象的值,对象其他的引用无论在哪里调用对象的属性值也会相应发生改变,一个对象可以有多个引用。或者说多个引用指向同一个对象,其中一个引用在任意地方修改了对象的属性值,其他的引用在任意地方获取到的对象属性值也会发生改变。

在《Thinking In Java》里的第三章赋值一节中有提到

Java 方法参数的传递

Java 方法参数的传递

我觉得这本书用很少的文字把这个问题说的很清楚了,简洁明了,浅显易懂,比我总结的好理解多了。不管是哪种总结明白了要旨,都可以理解了。

参考文章

http://blog.csdn.net/u013366812/article/details/52062178

https://www.cnblogs.com/chonh/p/6099605.html

相关文章: