Java是传值还是传引用问题
2016-06-29 17:05
232 查看
Java参数是传值还是传引用可能很多人不清楚,来看看下面的例子。
打印结果:
交换前: 李雷 韩梅梅
交换后: 李雷 韩梅梅
感觉很奇怪,为什么结果没有变化呢?
因为Java方法在执行的过程中实际上是传值。
大家知道employ_1的值实际上是Object1的地址,employ_2的值实际上为Object2的地址
在具体的执行过程中,首先会将empoly_1的值复制一份付给x,这样x就指向Object1对象了,同理,y就指向Object2对象了
在交换的过程中,实际上只是x和y进行了交换,employ_1与mploy_2实际上还是指向原来的对象,所以没有发生变化。
可能会有人会有疑惑,看如下代码:
结果如下:
更改name前: 李雷
更改name后: abc
有人觉得很奇怪,这个返回结果不就是说明,Java方法执行的时候传的是引用吗?因为最后name变了,其实不然,Java方法执行的时候仍然是传值。
因为方法执行的时候,首先会把employ_1的值拷贝一份,然后赋值给x,赋值之后employ_1和x都同时指向一个对象,对x所指向的对象进行修改,也必然会导致employ_1所指向的对象发生变化。
总结:Java复制并传递了“引用”的值,而不是对象。因此,方法中对对象的计算是会起作用的,因为引用指向了原来的对象。但是因为方法中对象的引用是“副本”,所以对象交换就没起作用。如图1所示,交换动作只对方法中的引用副本起作用了,不影响方法外的引用。所以不好意思,方法被调用后,改变不了方法外的对象的引用。如果要对方法外的对象引用做交换,我们应该交换原始的引用,而不是它的副本。
相关文章推荐
- java 传值还是传引用的问题
- Java传值还是传引用问题
- java参数传递。传递值还是引用问题
- 探讨Java中函数是值传递还是引用传递问题
- java经典问题:传值还是传引用(二)
- 关于Java传值还是传引用的问题
- java函数传值还是传引用的问题
- 讨论java是值传递还是引用传递,到String 常量池的问题学习。
- java经典问题:传值还是传引用
- JAVA 参数传递 是值传递 还是引用传递的问题。
- JAVA中是传值还是传引用?回答KEZHANG问题
- java经典问题:传值还是传引用
- java经典问题:传值还是传引用
- java经典问题:传值还是传引用
- java方法传值还是传引用的问题
- 关于Java对象作为参数传递是传值还是传引用的问题
- java传引用还是传值的问题
- Java中list存放的是值还是对象的引用问题
- java经典问题:传值还是传引用
- 【Stackoverflow好问题】Java是按值传递还是按引用传递