为什么呢?
原因就出现在常量池了。
如果Integer的值在[-128,127]时,都会从常量池中取。
这样所有这个区间的Integer的对象是完全相同的,使用==比较肯定是true,因为内存地址是一样的的嘛
过了这个区间的,肯定不同了,不同的对象,内存地址不一样了的。
这种情况下,只能使用Equals来比较。
对象之间比较是否相等,一定要使用Equals
来一块看看java.lang.Integer.IntegerCache
private static class IntegerCache {
static final int high;
static final Integer cache[];
static {
final int low = -128;
// high value may be configured by property
int h = 127;
if (integerCacheHighPropValue != null) {
// Use Long.decode here to avoid invoking methods that
// require Integer's autoboxing cache to be initialized
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
}
private IntegerCache() {}
}