1、装箱int到Integer,调用的是Integer.valueOf()
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
IntegerCache.low是-128
IntegerCache.high是127
-128到127范围内会做缓存,防止每次都产生新的对象
Integer i1 = 127; // 会调用Integer.valueOf()
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i1 == i2); // true
System.out.println(i3 == i4); // false
2、涉及到运算时会发生拆箱,Integer到int,调用的是Integer.intValue()
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
Integer i5 = 0;
System.out.println(i1 == i2); // true
System.out.println(i3 == i4); // false
System.out.println(i1 == i2 + i5); // true
System.out.println(i3 == i4 + i5); // true
和int做 == 比较,会拆箱成int比较大小