请教问题。

请教问题。

Integer i1 = new Integer(100);
Integer i2 = new Integer(100);
Integer i3 = 100;
Integer i4 = 100;
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i1==i2);//false
System.out.println(i1==i3);//false
System.out.println(i3==i4);//true
System.out.println(i5==i6);//false

老师我想问,Integer i1 = new Integer(100);是创建对象吧,放在什么地方?Integer i3 = 100;是创建对象么?它又是放在什么地方?他们对象的引用的值怎么为false?-128~127之间的数据不是在缓存区直接创建么。-128~127这个只是适合Integer吗?其他包装类适合吗?

正在回答

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

1回答

同学你好,依次回答如下问题:

1、Integer i1 = new Integer(100);表示创建Integer 类型的对象,存放在堆中。

2、Integer i3 = 100;因为数值在-128~127之间所以不会创建对象,在缓存区中进行获取。

3、他们对象的引用的值怎么为false?i1和i3为false的原因是:对于包装类等号比较的是地址是否相等,而i1和i3存放在不同的地方,并且i1是new的对象,在堆中重新开辟的空间,所以返回false。

4、-128~127的缓存数据适用于Integer、Short、Byte、Long包装类。

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

  • qq_粽翎_0 提问者 #1
    感谢解答,还有一点疑问:-128~127的数在缓冲区中已经有了,Integer i3 = 100只是用i3来引用指向100的意思吧,超过这个范围就相当于new新对象是么。后面的课程提到float和double没有常量池的概念就是没有这个缓冲区的意思吧,每次都等于new一个新对象吗? 那意思是其他的数值型包装类有缓冲区吗,只是这个缓存数据的范围不一样对吗?
    2019-11-19 18:03:27
  • 好帮手慕酷酷 回复 提问者 qq_粽翎_0 #2
    同学你好,对于同学上述的理解,都是正确的,但是要注意除了double和float,对于Integer、Short、Byte、Long包装类的缓冲区的数据范围是-128~127之间,而Character的包装类的缓存范围在0~127之间。 ​如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-11-19 18:47:44
  • qq_粽翎_0 提问者 回复 好帮手慕酷酷 #3
    非常感谢!
    2019-11-19 18:56:10
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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