4-2的X++

4-2的X++

x++就是x=x+1

x=400+1

x=401

老师,1、x=401后肯定执行自动装箱,是调用vlaueOf方法吗?

2、x指向的还是原来的对象,哪里指向了新的对象?

正在回答 回答被采纳积分+1

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

2回答
好帮手慕珊 2019-08-10 15:45:53

同学,你好!之前老师的回复有些问题,你可以看这个选择题的解析。执行x++后,创建了一个新的对象。这里的x不是基本数据类型,不能看成x=400+1这样使用。x之前是指向400这个数,然后进行x++就是x拆箱得到400,加1后生成一个新的数据,放到了一个新的内存空间中,也就是一个新的对象401。然后引用x就指向这个401所在的内存空间了,也就是你提到的装箱操作。

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

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

  • 提问者 鱼儿0001 #1
    老师,x的引用指向新的对象401而不是原来的400,意思是x这个引用它在栈空间的地址发生改变了吗?
    2019-08-11 21:53:24
  • 好帮手慕阿莹 回复 提问者 鱼儿0001 #2
    是的,同学理解的没错,如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-08-12 10:12:40
好帮手慕酷酷 2019-08-08 17:05:14

同学你好,

1、你的理解是正确的,在赋值完成后会隐示调用valueOf方法。

2、x指向的还是原来的对象,因为进行加1后指向原来的引用,没有进行重新的new对象。

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


  • 提问者 鱼儿0001 #1
    老师好,关于第二个问题,可能你对4-2的题目不太清楚。在这道题里,Integer x=400,Integer y=x,x++,最后问题是:x==y,答案是false。也就是说,x++后,它的地址与y已经不同了,x不等于y,但是这块地方我不理解,希望老师能解释一下,thank!~
    2019-08-09 22:08:55
  • 好帮手慕珊 回复 提问者 鱼儿0001 #2
    同学,你好!401和400不是同一个值了,所以401肯定开辟了一个新的空间。x++相当于x=x+1;x+1得到401后重新赋值给x,也就是x最后指向了401的空间,所以x和y的地址就不同了。祝学习愉快!
    2019-08-10 10:14:08
  • 提问者 鱼儿0001 回复 好帮手慕珊 #3
    老师,你自己看之前的老师进行的回复:x指向的还是原来的对象,因为进行加1后指向原来的引用,没有进行重新的new对象。之前的老师认为,x++后,x指向的对象没变,也没有去new一个新的对象。我怎么理解?
    2019-08-10 11:47:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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