黑马程序员技术交流社区

标题: Integer的面试题 [打印本页]

作者: zhiguoguo    时间: 2015-12-19 23:56
标题: Integer的面试题
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));
作者: 青菜市场    时间: 2015-12-20 00:03
答案跟下面一样么?
false
True

false
true

true
true

false
true
作者: sunpeijie    时间: 2015-12-20 14:21
青菜市场 发表于 2015-12-20 00:03
答案跟下面一样么?
false
True

一样  解释下  最后一个false 不太懂
作者: 18338762337    时间: 2015-12-20 14:27
没看太明白,求解释
作者: schubertw    时间: 2015-12-20 15:01
这里给你贴出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.     }
复制代码

作者: 青菜市场    时间: 2015-12-20 15:45
sunpeijie 发表于 2015-12-20 14:21
一样  解释下  最后一个false 不太懂

最后是因为197超出了byte的取值范围 系统就会分出更大的内存来存该数,若是在byte的取值范围就不会再分内存来这个输,这是包装类对象较特殊的部分
作者: 王冀仁    时间: 2015-12-21 16:52
sunpeijie 发表于 2015-12-20 14:21
一样  解释下  最后一个false 不太懂

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

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

正如楼上所说,会返回在堆内存中新建的对象,“两个new出来的对象”在进行“==”运算时,自然返回false。需要指出的是:范围在byte类型值内时,会使用cache中的对象;超出该范围,将new出一个新对象。
和题对应,199>127,将新建对象。

作者: DayBreak    时间: 2015-12-21 21:06
顶一个 {:3_47:}
作者: sooul    时间: 2015-12-21 22:18
没看太懂。。。。。
作者: duluhuang    时间: 2015-12-21 23:12
66666666666666666666666666666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2