Integer.valueOf()和自动装箱之间的性能差异是什么?
下面是我的代码:
int value = 5;
//1 Integer.valueOf()
Integer result = Integer.valueOf(5);
//2 Autoboxing
Integer result = value; 注意:我需要Integer对象。例如:使用它作为HashMap<整数中的键,String>
我不知道为什么,哪个更快?Integer.valueOf() (1)和Autoboxing (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对象。
我试着理解,但仍然不知道为什么,哪个更快?
发布于 2020-01-10 18:26:28
这个问题与this question密切相关。正如已经在评论和对链接问题的回答中所说的,
自动装箱调用静态方法
Integer.valueOf(),自动装箱调用给定Integer对象上的intValue()。没有别的,真的--这只是语法上的糖。
显然,性能是相同的。然而,正如this answer所说,事情有点复杂:
不能保证自动装箱是如何在内部实现的。
因此,从理论上讲,如果给定一些奇特的java编译器,实现可能会有所不同,性能也会有所不同。实际上,没有理由以不同的方式实现自动装箱。此外,如果有更好的实现,它可能会被合并到Integer.valueOf()中。因此,即使这样,性能也是一样的。
在Java中,使用替代实现来做同样的事情通常不会有任何好处。例如,Arrays.copyOf和System.arraycopy之间过去存在性能差异,但在Oracle / OpenJDK JVM中对它们进行了优化。
https://stackoverflow.com/questions/59675607
复制相似问题