1.Integer
1.Integer比较是否相等?
Integer a = 1000, b = 1000;
System.out.println(a == b);//1
Integer c = 100, d = 100;
System.out.println(c == d);//2
答案
false
true
解析:
Integer内部类IntegerCache.java,它缓存了从 - 128 到 127 之间的所有的整数对象。
static final Integer cache[];
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
现在你可能会问,为什么这里需要缓存?
此范围内的 “小” 整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。

本文深入探讨Java中Integer对象的缓存机制,解释为何在特定范围内Integer对象可以直接通过'=='进行比较,而在范围外则不行。揭示了IntegerCache.java内部实现细节,包括缓存数组的创建与valueOf方法的工作原理,帮助理解Java内存优化策略。
274

被折叠的 条评论
为什么被折叠?



