java怎么从一个类传值到另一个类_Java中传值与传引用

不管Java参数类型是什么,一律传递参数的副本。

《Thinking In Java》:“When you're passing primitives into a method,you get a distinct copy of the primitive.When you're passing a reference into a method,you get a copy of the reference.(如果Java是传值,那么传递的是值的副本;如果Java是传引用,那么传递的是引用的副本)”。

在Java中,变量分为以下两类。

对于基本类型变量(int, long, double, float, byte, boolean, char),Java是传值的副本。

对于一切对象型变量,Java都是传引用的副本。(如String)

对基本类型而言,传值就是把自己复制一份传递,即使自己的副本变了,自己也不变。

而对于对象类型而言,它传的引用副本指向自己的地址,而不是自己实际值的副本。

《Thinking In Java》:“不管是基本类型还是对象类型,都是传值。”,这种说法也没有错,因为它们把引用副本也当做是一种“值”。

举几个栗子🌰

例一:基本数据类型

cbb0bb1e4534a0405155c287eabc36d9.png  可以看出,test()方法并没有对test参数源产生影响,即对main方法中的test变量没有影响,说明参数类型是简单类型的时候,是按值传递的。

以参数形式传递简单类型的变量时,实际上是将参数的值作为一个副本传进方法函数的,所以在方法函数中不管怎么改变其值,其结果都是只改变了副本的值,而不是源值。

例二:对象类型一

c1b9ea54cd6a3c8fb872c186e5e4ed62.png

其中string是一个引用,Java对引用形式传递对象类型的变量时,实际上是将引用作为一个副本传进方法函数的。而这个引用的副本所指向的就是对象的地址。

所以说,通过引用副本找到地址并修改地址中的值,也就修改了对象。

例三:对象类型二

4d8ee7f0408e3063f0d1590f009fb6ea.png

为什么是这样的呢?这是因为当执行str="World";时,其过程为:首先系统会自动生成一个新String对象,并把这个新对象的值设为"World!",然后把这个对象的引用赋给str。当函数结束,str作用消失,原来的内存地址上的内容未加改变,所以打印结果仍然是Hello。

而例二就不同了,StringBuffer是产生一块内存空间,相关的增、删、改操作都在其中进行,所以为其添加一句",World!"仍然是在同一段内存地址上进行,str所指向的引用并没有改变。

例四:数组类型传递

bd4a5e41710e36f35429be88db18daf5.png

上面程序中,数组传值的本质是传地址值的副本。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值