Java为了性能提供了一个类似缓存的东西,不仅仅是Integer,Long也有同样的缓存,在内存中定义了一个长度为 255的对象数组,装箱之前先比较一下,如果是在-128-127范围内就直接取,所以只要是-128~127之间的取的都是一个对象,是true了,-128~127之外的就会重新new对象。
public class IntegerTest {
/**
* @param args
*/
public static void main(String[] args) {
Integer i1 = 10;
Integer i2 = 10;
System.out.println(i1 == i2); // true
//直接生成新的对象,不会从在缓存中获取
Integer i3 = new Integer(10);
Integer i4 = new Integer(10);
System.out.println(i3 == i4); // false
Integer i5 = 0;
System.out.println(i1 == i2 + i5);// true
//在i4+i5运算前,先进行了拆箱操作,所以比较的是内容
System.out.println(i3 == i4 + i5);// true
Integer i6 = 128;
Integer i7 = 128;
System.out.println(i6 == i7); // false
Integer i8 = -129;
Integer i9 = -129;
System.out.println(i8 == i9); // false
}
}