问下为什么A的数值变了但B的数值不跟着变?

问下为什么A的数值变了但B的数值不跟着变?

  Integer a = 100;

  Integer b = 100;

  a = a + 5;

  System.out.println(a+"\n"+b);


问下在这个里面为什么a的数值变了但b的数值没有变,既然a,b是指向同一个堆空间,那么理论上我改变了a的指那么堆空间里面a的值也就跟着变化了,那么因为b是指向这个堆空间的,b也应该跟着变化才对啊


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,虽然这两个值都指向同一个堆空间,但是因为Integer的底层是被final修饰的,如果改变他的值,就会创建一个新的对象,也就是a指向了新的内存空间;所以a的值改变了,并不会影响b的值

http://img1.sycdn.imooc.com//climg/5edc4df30858f47d02780057.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕阿慧 2020-06-06 13:43:37

同学你好,a=a+5; 代码执行如下:a会先自动拆箱成int类型100,与5相加,再将int类型的结果105赋给a。

这个过程并没有改变a和b所指定堆空间中的数据。所以b的数值不会跟着变。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕前端8369922 #1
    既然a和b所指定的堆空间的数据没有改变,那为什么a的值会改变呢? 不是很懂? a和b既然指定像同一个空间,那么空间内的值如果改变的话应该是他们俩一起改变,或者值不变的话应该都不变化才对?
    2020-06-07 02:52:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师