真是挺蛋疼的java比较符号
public static void main(String[] args)
?? {
???? int a = 1000, b = 1000;
???? System.out.println(a == b);
?
???? Integer c = 1000, d = 1000;
???? System.out.println(c == d);
?
???? Integer e = 100, f = 100;
???? System.out.println(e == f);
?? }
运行结果是:true false true;
?
Integer的相关源码
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
从源码可以看到
Integer在内部使用了一个私有的静态类IntegerCache,此类内部封装了一个Integer对象的cache数组来缓存Integer对象
private static class IntegerCache {
static final Integer cache[];
//……
}
IntegerCache内部的代码,会看到它使用静态初始化块在cache数组中保存了[-128,127]区间内的一共256个Integer对象。
?
当给Integer变量直接赋整数值时,如果这个数值位于[-128,127]内,JVM(Java Virtual Machine)就直接使用cache中缓存的Integer对象,否则,JVM会重新创建一个Integer对象。
由此可得知以上结果的原因了
但如果 Integer e = 100 ,f=new Integer(100) e==f 返回值就会问false了