public class IntegerTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer a = 100 ;
Integer b = 100 ;
Integer c = 200 ;
Integer d = 200 ;
System.out.println(a==b);
System.out.println(a==100);
System.out.println(c==d);
System.out.println(c==200);
}
}
运行结果:
false
true
解释:
Integer.class
// 建立缓存数组
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
// 取值
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
从源码中看:
-127至128之间的数值在缓存中存放,每次取值时都是从缓存中取得,故每次都是同样的值;
否则,则会新建立对象,故通过 == 比较时返回false