【发布时间】:2012-01-27 08:49:02
【问题描述】:
最近我看到这样的代码(Java):
myMethod(new Integer(123));
我目前正在重构一些代码,Sonar 工具中有一个提示,使用这样的东西对内存更友好:
myMethod(Integer.valueOf(123));
但是在这种情况下,我认为如果我会使用没有区别:
myMethod(123);
我可以理解,如果我将变量传递给方法,但硬编码 int?或者如果会有 Long/Double 等,我想要 Long 表示数字。但是整数?
【问题讨论】:
-
实际上,您是否使用
myMethod(Integer.valueOf(123))或myMethod(123)并不重要,因为自动装箱将为您使用Integer.valueOf()。自己判断哪个更具可读性。 (假设myMethod接受Integer) -
从 JDK 9 开始,强烈建议使用 .valueOf() 方法而不是使用构造函数。这是因为它们都有 @HotSpotIntrinsicCandidate 注释,通知 HotSpot VM 它可以使用优化的汇编级代码来获得更好的性能。 --- 如果 HotSpot VM 用手写 * 汇编和/或手写编译器 IR(编译器内在)替换带注释的方法以提高 * 性能,则方法 * 被内在化。
标签: java integer new-operator value-of