public static void main(String []args) {
Integer a = 1;
Integer b = 1;
Integer c = 200;
Integer d = 200;
System.out.println(a == b);
System.out.println(c == d);
}
输出结果:
true
false
使用1或者1000赋值给Integer时,Java会翻译为Integer.valueof(xxx),附上源码,在-128到127之间的时候直接return IntegerCache.cahe[]了,因此出现了这个结果
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() {}
}
/**
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
本文深入探讨Java中Integer类的内部实现机制,特别是自动装箱如何将基本类型转换为包装类实例,以及在特定范围内如何通过缓存优化性能。文章详细解释了IntegerCache的作用和原理,帮助开发者理解Java内存管理和性能优化的关键点。

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



