java引用的问题

我们都知道java的引用分为值引用和对象引用,那么值引用和对象引用在使用上的区别是什么呢?直奔代码。
这里写图片描述
我定义了四个对象,分别是String、StringBuilder、int、boolean类别。其中s、s1是对象引用,a、b是值引用。以下是执行结果
这里写图片描述
经过查找,范县java方法调用传参数引用是引用的复制,而不是同一个引用,就是说在stack里面是两个不同的引用。可以参考http://blog.csdn.net/52rainbow/article/details/3484086
就是说,一个对象其实在方法执行中是有两个引用,String对象是不可变的,每次都会创建新的对象,所以,方法内部的引用其实是指向了另一个对象,方法外的引用还是指向原来的对象。但StringBuilder是操作的同一个对象,尽管方法内是不用的引用,但是两个引用对应的对象的值确实是改变了。
我们可以看到基本类型的值引用,体现出了和String类型相同的效果,其实本来就是这样,因为基本类型都是特殊的,既不属于对象,也不属于引用。姑且理解为跟String一样,每次赋值都是指向一个新的基本类型。
但是我们实际工作中操作的很多pojo对象,在方法内调用set方法时,事实都是可以改变pojo对象的某个属性的,难道这里和上面不冲突吗?其实我们仔细思考就能考虑出结果,一个pojo对象里面存的也是其他对象的引用,调用set方法时,其实是把对象的属性的引用设置成另一个对象的引用。可以把这种情况分层来看,stack里面的引用是第一层,对象的属性的引用是第二层,即使stack里面的引用不是一个,但是对应对象的属性的引用其实是一个,每次set都是操作的都是操作的对象属性的引用,所以我们实际工作的时候也根本没有体会。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值