JAVA中的值传递

直接看结果

无论是值传递,还是引用传递,只不过是求值策略的一种,那求值策略还有很多,比如共享对象传递的现象和引用传递也是一样的。那凭什么就说Java中的参数传递就一定是引用传递而不是共享对象传递呢?
那么,Java中的对象传递,到底是哪种形式呢?其实,还真的就是共享对象传递。其实在《The Java TM Tutorials》中,是有关于这部分内容的说明的。首先是关于基本类型描述如下:

Primitive arguments,such as an int or a double,are passed intomethods by value. This means that any changes to the values of the parameters exist only within the scope of the method. When the method returns,the parameters are gone and any changes to them are lost.

即,原始参数通过值传递给方法。这意味着对参数值的任何更改都只存在于方法的范围内。当方法返回时,参数将消失,对它们的任何更改都将丢失。
关于对象传递的描述如下:

Reference data type parameters,such as objects,are also passed intomethods by value.This means that when the method returns,the passed-in reference still references the same object as before.However,thevalues of the object’s fields can be changed in the method,if they havethe proper access level.

也就是说,引用数据类型参数(如对象)也按值传递给方法。这意味着,当方法返回时,传入的引用仍然引用与以前相同的对象。但是,如果对象字段具有适当的访问级别,则可以在方法中更改这些字段的值。
这一点官方文档已经很明确的指出了,Java 就是值传递,只不过是把对象的引用当做值传递给方法。你细品,这不就是共享对象传递么?

其实Java中使用的求值策略就是传共享对象调用,也就是说,Java会将对象的地址的拷贝传递给被调函数的形式参数。只不过"传共享对象调用"这个词并不常用,所以Java社区的人通常说"Java是传值调用",这么说也没错,因为传共享对象调用其实是传值调用的一个特例。

总结

我们知道,编程语言中需要进行方法间的参数传递,这个传递的策略叫做求值策略。
在程序设计中,求值策略有很多种,比较常见的就是值传递和引用传递。还有一种值传递的特例——共享对象传递。
值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来,如果是传递副本,那就是值传递,否则就是引用传递。
在Java中,其实是通过值传递实现的参数传递,只不过对于Java对象的传递,传递的内容是对象的引用。
我们可以总结说,Java 中的求值策略是共享对象传递,这是完全正确的。
但是,为了让大家都能理解你说的,我们说Java中只有值传递,只不过传递的内容是对象的引用。这也是没毛病的。
但是,绝对不能认为Java中有引用传递。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值