对象内存引用问题

对象内存引用问题

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

老师,您能帮我详细解释一下这道题吗?

正在回答

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

2回答

如果x不加,结果为true,运行效果如下:

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

执行Integer x=400;这段代码会创建一个Integer对象,x的引用指向它;执行Integer y = x;这段代码,y的引用和x的引用指向了同一片内存空间。这时,x和y指向同一个对象。之后,执行x++,将会创建一个新的Integer对象401,然后x的引用指向新创建的对象。这时x和y不再指向同一个对象。执行x==y得到结果为false;

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


好帮手慕阿莹 2018-08-22 15:24:35

x和y均指向常量池中的400,x++后,说明:y=400,x=401,所以x==y的返回值为false

StringBuilder sb2=sb1;表示用StringBuilder的引用sb2指向了引用sb1所指向的对象,所以sb1和sb2指向的是同一个对象。因此他们指向的地址是相同的。

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

  • 提问者 慕圣2241928 #1
    常量池中的整型数据范围不是从-128-127吗,x和y都不在这个范围内,不是要通过new关键字来创立对象吗,x==y不是因为new出来的地址不同吗,怎么和数值对应了呢?即使x不加这个结果也为false吧
    2018-08-22 15:53:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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