gpt4 book ai didi

java - Integer.valueOf() 和 Autoboxing 之间的性能差异是什么

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:55 24 4
gpt4 key购买 nike

Integer.valueOf() 和自动装箱之间的性能差异是什么?

这是我的以下代码:

    int value = 5;

//1 Integer.valueOf()
Integer result = Integer.valueOf(5);

//2 Autoboxing
Integer result = value;

注意:我需要整数对象。例如:将其用作 HashMap< Integer,String>

中的键

我不知道为什么,哪个更快? 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);
}

关于(2)我听说JVM有自己的Integer池来重用Integer对象。

我尝试理解但仍然不知道为什么以及哪个更快?

最佳答案

这个问题与 this question 密切相关。正如评论和链接问题的答案中已经说过的,

autoboxing invokes the static method Integer.valueOf(), and autounboxing invokes intValue() on the given Integer object. There's nothing else, really - it's just syntactic sugar.

显然,性能是一样的。然而,事情有点复杂,如 this answer说:

there is no guarantee of how autoboxing is internally implemented.

因此,从理论上讲,给定一些外来的 java 编译器,实现可能会有所不同,性能也可能会有所不同。实际上,没有理由以不同的方式实现自动装箱。此外,如果有更好的实现,它可能会合并到 Integer.valueOf() 中。因此即使如此,性能也将是相同的。

<小时/>

在 Java 中,使用替代实现执行相同操作通常没有任何好处。例如,Arrays.copyOfSystem.arraycopy 之间曾经存在性能差异,但据我所知,它们在 Oracle/OpenJDK JVM 中被优化掉了。

关于java - Integer.valueOf() 和 Autoboxing 之间的性能差异是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59675607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com