一个integer面试问题:
- 下面这段代码的输出结果是什么?
publicclassMain{
publicstaticvoidmain(String[] args) {
Integer i1 =100;
Integer i2 =100;
Integer i3 =200;
Integer i4 =200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
第一个是true,第二个是false;
看下Integer的value0f源码就明白了:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
代码中i的值范围是-128-+128之间。如果超出这个范围,会new一个新的对象,所以i=200时,时false。 - 注意:把上面的Integer 换成Double,两个都是false,原因是二者的实现方法不同,在某个范围内的整型数值的个数是有限的,而浮点数却不是。具体原因建议看看源码的实现。