Integer i = 128;
Integer j = 128;
System.out.println(i == j);
上面程序的输出结果为:false
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high) //IntegerCache.low = -128,
//IntegerCache.high = 127
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
代码块2是包装类自动装箱的过程,对于int类型的数值 i ,当 -128 <= i <= 127时候,引用的是cache数组中的同一个数组元素,所以此时 == 比较两个包装类对象是 true.
当 i 超出范围,就会重新创建一个 Integer 对象,此时使用 == 返回肯定为false.