A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhiguoguo 中级黑马   /  2015-12-19 23:56  /  1571 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
System.out.println("-----------");

Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
System.out.println("-----------");

Integer i5 = 97;
Integer i6 = 97;
System.out.println(i5 == i6);
System.out.println(i5.equals(i6));
System.out.println("-----------");

Integer i7 = 197;
Integer i8 = 197;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));

10 个回复

倒序浏览
青菜市场 来自手机 中级黑马 2015-12-20 00:03:02
沙发
答案跟下面一样么?
false
True

false
true

true
true

false
true
回复 使用道具 举报
青菜市场 发表于 2015-12-20 00:03
答案跟下面一样么?
false
True

一样  解释下  最后一个false 不太懂
回复 使用道具 举报
没看太明白,求解释
回复 使用道具 举报
这里给你贴出Integer的源码,对于大于127的数,Integer会去重新创建一个对象
  1. public static Integer valueOf(int i) {
  2.         assert IntegerCache.high >= 127;
  3.         if (i >= IntegerCache.low && i <= IntegerCache.high)
  4.             return IntegerCache.cache[i + (-IntegerCache.low)];
  5.         return new Integer(i);
  6.     }
复制代码
回复 使用道具 举报
sunpeijie 发表于 2015-12-20 14:21
一样  解释下  最后一个false 不太懂

最后是因为197超出了byte的取值范围 系统就会分出更大的内存来存该数,若是在byte的取值范围就不会再分内存来这个输,这是包装类对象较特殊的部分
回复 使用道具 举报
王冀仁 来自手机 中级黑马 2015-12-21 16:52:43
7#
sunpeijie 发表于 2015-12-20 14:21
一样  解释下  最后一个false 不太懂

最后一个,自动装箱取值必须在byte范围内,如果超过了byte范围,虚拟机则会重新开辟空间,所以为false
回复 使用道具 举报
本帖最后由 Jerson_ZF 于 2015-12-21 21:05 编辑

基本类型包装类在进行自动装箱的时候,比如在执行:
  1. Integer i = 199;
复制代码
的时候,实际是在执行:
  1. Integer i = Integer.valueOf(190);
复制代码

正如楼上所说,会返回在堆内存中新建的对象,“两个new出来的对象”在进行“==”运算时,自然返回false。需要指出的是:范围在byte类型值内时,会使用cache中的对象;超出该范围,将new出一个新对象。
和题对应,199>127,将新建对象。
回复 使用道具 举报
顶一个 {:3_47:}
回复 使用道具 举报
sooul 中级黑马 2015-12-21 22:18:53
10#
没看太懂。。。。。
回复 使用道具 举报
66666666666666666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马