new Integer(123)、Integer.valueOf(123) 和 just 123 之间的区别

新手上路,请多包涵

最近我看到这样的代码(Java):

 myMethod(new Integer(123));

我目前正在重构一些代码,Sonar 工具中有一个提示,使用这样的东西对内存更友好:

 myMethod(Integer.valueOf(123));

但是在这种情况下,我认为使用以下内容没有区别:

 myMethod(123);

我可以理解,如果我将变量传递给方法,但硬编码 int?或者如果有 Long/Double 等,我想要 Long 表示数字。但是整数?

原文由 MicNeo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 362
1 个回答

new Integer(123) 将为每次调用创建一个新的 Object 实例。

根据 javadocInteger.valueOf(123) 与缓存对象有所不同…因此您可能(或可能不会)得到相同的 Object 如果您多次调用它。

例如,下面的代码:

    public static void main(String[] args) {

        Integer a = new Integer(1);
        Integer b = new Integer(1);

        System.out.println("a==b? " + (a==b));

        Integer c = Integer.valueOf(1);
        Integer d = Integer.valueOf(1);

        System.out.println("c==d? " + (c==d));

    }

具有以下输出:

 a==b? false
c==d? true

至于使用 int 值,您使用的是原始类型(考虑到您的方法也在其签名上使用原始类型) - 它会使用更少的内存并且可能更快,但您不会例如,将它添加到集合中。

如果您的方法的签名使用 Integer ,还要查看 Java 的 自动装箱- 使用它时,JVM 会自动为您调用 Integer.valueOf() (因此也使用缓存)。

原文由 Marcelo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题