Java值传递

Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。

基本类型的值传递:

先看一个小例子:

他的输出结果是:


从结果可以看出,在调用changeValue()方法的前后value的值并没有发生变化。

为什么呢?

因为当value作为参数传递给changeValue()方法的时候,传递的是内存空间中value所指向的存储单元的值。传过去之后,内存空间也为x分配存储单元,然后x存储单元的值就是value所传过来的值。此后,在changeValue()方法中对x的一切操作都是针对x所指向的这个存储单元,与value所指向的那个存储单元没有关系了!

对象的值传递(理解为引用传递不妥)

同样来看下例子



他的输出结果:


从结果可以看出,在调用changeValue()方法的前后name的值发生了变化。

这里的值传递我之前是理解为把实体对象的地址传递过去了。

但是实际上这里传递的也是引用对象t2所对应的存储单元的内容。前面基本类型所对应的存储单元的值就是变量的值,而这里存储单元的内容是实体对象的地址。那么传过去之后,t1所对应的存储单元的内容也是实体对象的地址了。同样在changeValue()方法中对t1的一切操作都是针对t1所指向的这个存储单元,与t2所指向的那个存储单元没有关系了!

回顾一下上面的一个值传递的例子,值传递,就是将存储单元中的内容传给调用函数中的那个参数,这里是不是异曲同工,是所谓“值传递”,而非“引用传递”!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,123评论 19 139
  • 众所周知,Java存在8种基础数据类型。不过,Java字节码中还有额外的两种基础数据类型,分别是reference...
    何知晓阅读 597评论 0 0
  • Java是值传递还是引用传递一直都有争论,我们最终下个结论,Java是值传递而不是引用传递。如果Java是引用传递...
    raymondcode阅读 314评论 0 2
  • 消息如同炸弹一颗炸弹 闯入了人们的耳朵 秋夜被炸开了 街头巷角被哭声与怒吼给充斥 “你所拨打的用户暂时无法接通” ...
    33号吸血鬼阅读 158评论 0 1