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
对象。
我试着理解,但仍然不知道为什么和哪个更快?
int
(Java中原始类型存在的全部理由是它们速度更快)。自动装箱更易于阅读,因此如果您必须使用包装类型,请使用它。 - Elliott FrischInteger.valueOf()
。因此性能也是相同的。 - user207421IntegerCache
是整数池。 - Elliott FrischInteger
和Integer.valueOf()
。 - user207421