1、为什么 Java 中“1000==1000”为false,而”100==100“为true?
Integer 类有一个内部私有类,IntegerCache.java,它缓存了从 - 128 到 127 之间的所有的整数对象
Integer.valueOf:值的范围在 - 128 到 127 之间,它就从高速缓存返回实例
Integer i = Integer.valueOf(100);
//Integer类
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
缓存数据查看
Class cache = Integer.class.getDeclaredClasses()[0];
Field myCache = cache.getDeclaredField("cache");
myCache.setAccessible(true);
//缓存数据集:共256条 newCache[0] = -128 newCache[255] = 127
Integer[] newCache = (Integer[]) myCache.get(cache);
//如果修改缓存4=5
newCache[132] = newCache[133];
int a = 2;
int b = a + a;//结果为newCache[132] =newCache[133] =5
2、