最近我看到这样的代码(Java):
myMethod(new Integer(123));
我目前正在重构一些代码,Sonar 工具中有一个提示,使用这样的东西对内存更友好:
myMethod(Integer.valueOf(123));
但是在这种情况下,我认为使用以下内容没有区别:
myMethod(123);
我可以理解,如果我将变量传递给方法,但硬编码 int?或者如果有 Long/Double 等,我想要 Long 表示数字。但是整数?
原文由 MicNeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
new Integer(123)
将为每次调用创建一个新的Object
实例。根据 javadoc ,
Integer.valueOf(123)
与缓存对象有所不同…因此您可能(或可能不会)得到相同的Object
如果您多次调用它。例如,下面的代码:
具有以下输出:
至于使用
int
值,您使用的是原始类型(考虑到您的方法也在其签名上使用原始类型) - 它会使用更少的内存并且可能更快,但您不会例如,将它添加到集合中。如果您的方法的签名使用
Integer
,还要查看 Java 的 自动装箱- 使用它时,JVM 会自动为您调用Integer.valueOf()
(因此也使用缓存)。