public class Test {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
if(i1 == i2){
System.out.println("==");
}else{
System.out.println("!=");
}
Integer i3 = 200;
Integer i4 = 200;
if(i3 == i4){
System.out.println("==");
}else{
System.out.println("!=");
}
}
}
结果为
==
!=
原因Integer 类会缓存-128 到 127 之间的整数 但是如果new Interger的话就是不同的对象了
源代码分析
//如果是在-128到正的127之间就返回缓存里面的值。
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);
}
//缓存的代码
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);
}
}