- new Integer(1) 和Integer a = 1不同,前者会创建对象,存储在堆中,而后者因为在-128到127的范围内,不会创建新的对象,而是从IntegerCache中获取的。那么Integer a = 128, 大于该范围的话才会直接通过new Integer(128)创建对象,进行装箱。
Integer i = new Integer(128);
Integer i2 = 128;
System.out.println(i == i2);
Integer i3 = new Integer(127);
Integer i4 = 127;
System.out.println(i3 == i4);
Integer i5 = 128;
Integer i6 = 128;
System.out.println(i5 == i6);
Integer i7 = 127;
Integer i8 = 127;
System.out.println(i7 == i8);
false
false
false
true
Integer当变量值在-128~127之间时,非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同;
Integer判断是否相等推荐使用
.equals()