Java值传递
2017-07-18 本文已影响0人
littlejian
Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
基本类型的值传递:
先看一个小例子:
他的输出结果是:
从结果可以看出,在调用changeValue()方法的前后value的值并没有发生变化。
为什么呢?
因为当value作为参数传递给changeValue()方法的时候,传递的是内存空间中value所指向的存储单元的值。传过去之后,内存空间也为x分配存储单元,然后x存储单元的值就是value所传过来的值。此后,在changeValue()方法中对x的一切操作都是针对x所指向的这个存储单元,与value所指向的那个存储单元没有关系了!
对象的值传递(理解为引用传递不妥)
同样来看下例子
他的输出结果:
从结果可以看出,在调用changeValue()方法的前后name的值发生了变化。
这里的值传递我之前是理解为把实体对象的地址传递过去了。
但是实际上这里传递的也是引用对象t2所对应的存储单元的内容。前面基本类型所对应的存储单元的值就是变量的值,而这里存储单元的内容是实体对象的地址。那么传过去之后,t1所对应的存储单元的内容也是实体对象的地址了。同样在changeValue()方法中对t1的一切操作都是针对t1所指向的这个存储单元,与t2所指向的那个存储单元没有关系了!
回顾一下上面的一个值传递的例子,值传递,就是将存储单元中的内容传给调用函数中的那个参数,这里是不是异曲同工,是所谓“值传递”,而非“引用传递”!!