Java 中的参数传递是值传递呢?还是引用传递?

首先说结论:Java 中的参数传递是值传递:
看下面第一个例子:
我们将a(基本数据类型int)当作参数
在这里插入图片描述

可以看到:实参并没有改变

因为基本数据类型是存在在栈中的,在传参时,会将数据创建一个副本同样放入栈中,这个副本改变了,而我们的实参并没有改变,这符合值传递
在这里插入图片描述
再看第二个例子:
在这里插入图片描述

这里我没有重写tostring方法,结果如下,可以看到, 形参和实参是一样的
在这里插入图片描述
那么可能有小伙伴质疑java不是值传递,我们看下图:

对象的引用存放在栈中,而我们的对象存放在堆中

在传参过程中,同例子1一样,会在f方法中创建一个副本,这个副本同样指向堆中的同一对象

实参指向的对象其实没有变,而我们又把name值给改了,就好像是对象改变了,实际没有变

还是符合值传递的
在这里插入图片描述
再看第三个例子:我们直接在方法中重新new一个新的对象
在这里插入图片描述
结果如下
在这里插入图片描述
此时形参和实参又不一样的,其实原理是一样的:
我们在new的过程中,将副本指向了新的对象而已
实参的指向从未发生过改变,符合值传递
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值