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,现在无法投票支持你的答案。