Java Integer.valueOf()和自动装箱之间的性能差异是什么
Java Integer.valueOf()和自动装箱之间的性能差异是什么,java,performance,integer,autoboxing,Java,Performance,Integer,Autoboxing,Integer.valueOf()和自动装箱之间的性能差异是什么 这是我的以下代码: int value = 5; //1 Integer.valueOf() Integer result = Integer.valueOf(5); //2 Autoboxing Integer result = value; 注意:我需要整数对象。例如:将其用作HashMap 我不知道为什么,哪个更快Integer.valueOf()(1)或自动装箱(2) 关
Integer.valueOf()和自动装箱之间的性能差异是什么
这是我的以下代码:
int value = 5;
//1 Integer.valueOf()
Integer result = Integer.valueOf(5);
//2 Autoboxing
Integer result = value;
注意:我需要整数对象。例如:将其用作HashMap
我不知道为什么,哪个更快Integer.valueOf()
(1)或自动装箱(2)
关于(1)我检查了Integer.valueOf()的java代码。他们似乎从缓存中获取Integer
对象
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
公共静态整数值(int i){
如果(i>=IntegerCache.low&&i这个问题与。密切相关,正如评论和对链接问题的回答中所说
自动装箱调用静态方法Integer.valueOf()
,自动取消装箱调用给定的Integer
对象上的intValue()
。实际上,没有其他东西了-它只是语法糖
显然,性能是一样的。但是,事情有点复杂,正如所说:
无法保证自动装箱在内部是如何实现的
因此,从理论上讲,给定一些奇特的java编译器,实现可能会有所不同,性能也可能有所不同。实际上,没有理由以不同的方式实现自动装箱。此外,如果有更好的实现,它可能会合并到Integer.valueOf()中
。因此,即使这样,性能也会相同
在Java中,使用替代实现来做同样的事情通常不会带来任何好处。例如,Arrays.copyOf
和System.arraycopy
之间曾经存在性能差异,但在Oracle/OpenJDK JVM中对它们进行了优化。两者都没有。它们的速度相同如果你想“更快”,请使用int
(Java中存在的基本类型的全部理由是它们“更快”).Autoboxing更容易阅读,所以如果必须使用包装类型,请使用它。@ElliottFrisch谢谢您的建议,但我需要在函数中返回Integer对象。@VishwaRatna实际上我有一个int值,所以我不知道哪种方式更适合获取Integer对象。我知道parseInt也是字符串。字节码是相同的。Autoboxing在引擎盖下使用了Integer.valueOf()
。因此性能也是一样的。@HieuTran您能否努力拼写Integer
和Integer.valueOf()
正确。非常感谢您的详细回答:)对不起,这是我的第一个问题,我刚刚加入stackoverflow,现在无法投票支持你的答案。