您的位置:首页 > 编程语言 > Java开发

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所示,交换动作只对方法中的引用副本起作用了,不影响方法外的引用。所以不好意思,方法被调用后,改变不了方法外的对象的引用。如果要对方法外的对象引用做交换,我们应该交换原始的引用,而不是它的副本。








阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: