- Integer包装类在一定范围内生成的对象是相等的,在范围外则是不等的,这个范围是[-128,128)。
public static void main(String[] args){
Integer a = 4;
Integer b = 4;
System.out.println(a==b);//true
Integer c = 159;
Integer d = 159;
System.out.println(c==d);//false
}
这里我们要注意(1)Integer a = Integer.valueOf(4)。而不是(2)Integer a = new Integer(4)。这两种情况给是不相同的。
- (2)是新声明出一个对象。每声明出一个对象就会在堆内存中创建一个属于这个对象的地址。让我们看看代码块及运行结果
public static void main(String[] args){
Integer a = 4
Integer b = 4;
Integer b1 = new Integer(4);
Integer b2 = new Integer(4);
System.out.println(b1==b2);//false
System.out.println(b==b1);//false
System.out.printlm(b==a);//true
}
从代码中我们可以看出b1,b2指向的地址是不同的。
b与b1,b2的也是不同的。但是与a是相同的。这是为什么呢
这就要看value这个方法的源代码了
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
从源代码中我们可以看出传进来的i值大小在范围内[-128,128)之间则返回数组cache中已有的值。若不满足在新建一个Integer对象。我们可以理解为a,b都指向的是同一个地址(当数值相同时)。