Java值传递与引用传递

1 Java值传递

Java原始数据类型在传递时以值传递,而包装类和其他的类在传递时是按引用传递的。


s1按照引用传递,n按照值传递,所以passParam(s1, n) 函数会修改s1的内容,而n的值不变。

将n的类型改为int的包装类Integer:

可以看到,打印的结果不变,这是为什么呢?
n还是按照引用传递的,只是由于Integer是不可变类,没有提供改变它的值的方法,程序中在执行n1 = 8时,实际上是会创建一个新的临时的Integer(值为8),然后将这个临时的引用传递给n1,方法调用完成后,由于n1是局部变量,n1的值在函数调用完成后就消失了,此时n的值不会改变。
具体过程可以看下面的调试过程:






所以不能理解为Integer是按照值传递的方式传递的,虽然结果看上去好像是的。

2 Java 引用传递

同样的:


ss2 = ss1 只会修改ss2的值而对s2没有影响。

不可变类:当创建了这个类的实例后,就不允许修改它的值。也就是一个对象一旦创建出来,在其整个生命周期中,它的成员变量就不能被修改了。例如Integer、Float、String、StringBuffer等类都是不可变类。
在java.lang包中对StringBuffer的定义为:


对Integer为:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值