62,620
社区成员
发帖
与我相关
我的任务
分享
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
IntegerCache只是个静态类而已,预先定义了256个数字的数组
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
同理,Character等也是有这样的缓存机制。
至于你说的,new Integer(i)和new String("str"),原理是一样的,都会和常量池打交道的。先在常量池找一遍,找到了直接指向;没找到就在常量池创建一个。