我正在使用Sonar使我的代码更清洁,它指出我正在使用new Integer(1)而不是Integer.valueOf(1).因为它似乎valueOf没有实例化一个新对象所以更加内存友好.怎么valueOf不能实例化一个新对象?它是如何工作的?对所有整数都是如此吗?
Bre*_*ail 71
Integer.valueOf为值-128到+127实现缓存.请参阅Java语言规范的最后一段,第5.1.7节,其中解释了装箱的要求(通常根据.valueOf方法实现).
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.7
pgr*_*ras 26
来自JavaDoc:
public static Integer valueOf(int i)返回表示指定int值的Integer实例.如果不需要新的Integer实例,通常应优先使用此方法,而不是构造函数Integer(int),因为此方法可能通过缓存频繁请求的值来显着提高空间和时间性能.
ValueOf 通常用于自动装箱,因此(当用于自动装箱时)缓存至少-128到127的值以遵循自动装箱规范.
以下是valueOfSun JVM 1.5 的实现.查看整个类以了解如何初始化缓存.
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37570 次 |
| 最近记录: |