Integer.valueOf(1) 比直接 new Integer(1) 性能更好,因为valueOf直接从缓存中返回Integer对象,只有数字在>=-128 && <=127这个区域会直接读缓存,否则调用new Integer新创建一个对象.所以说valueOf性能更好.因为它一开始就被缓存了.
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
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);
}
}