public static void main(String[] args) {
Integer i1 = new Integer(100);
Integer i2 = new Integer(100);
System.out.println(i1 == i2);
System.out.println(i1.equals(i2));
System.out.println("-----------");
Integer i3 = new Integer(200);
Integer i4 = new Integer(200);
System.out.println(i3 == i4);
System.out.println(i3.equals(i4));
System.out.println("-----------");
Integer i5 = 100;
Integer i6 = 100;
System.out.println(i5 == i6);
System.out.println(i5.equals(i6));
System.out.println("-----------");
Integer i7 = 200;
Integer i8 = 200;
System.out.println(i7 == i8);
System.out.println(i7.equals(i8));
}
输出结果:
false
true
-----------
false
true
-----------
true
true
-----------
false
true
针对代码i5和i6的情况
-128到127是byte的取值范围,在这个范围内的取值,自动装箱不会新建对象,而是从常量池中获取;如果超过取值byte取值范围,会再新建对象。
源码:
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
Integer
最新推荐文章于 2024-07-30 20:50:32 发布