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); }确实是缓存了,Long,Integer,Short都有各自的缓存 学习了..
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); } 恩,懂了,谢谢ZangXT
算是享元设计模式的体现吧。
俺也不懂
valueOf
public static Integer valueOf(int i)返回一个表示指定的 int 值的 Integer 实例。如果不需要新的 Integer 实例,则通常应优先使用该方法,而不是构造方法 Integer(int),因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。 参数:
i - 一个 int 值。
返回:
表示 i 的 Integer 实例。
从以下版本开始:
1.5 通过缓存提高空间和时间性能,目标很明确。Integer i=5;这种后编译器自动的把它处理为Integer i=Integer.valueOf(5);剩下的问题直接去看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);
}确实是缓存了,Long,Integer,Short都有各自的缓存
学习了..
在 autoboxing 中,Java 编译器会把
Integer a1 = 150;
Integer a2 = 150;
处理成
Integer a1 = Integer.valueOf(150);
Integer a2 = Integer.valueOf(150);
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
恩,懂了,谢谢ZangXT