gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:12:14 24 4
gpt4 key购买 nike

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

myMethod(new Integer(123));

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

myMethod(Integer.valueOf(123));

但是在这种情况下,我认为如果我会使用没有区别:

myMethod(123);

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

最佳答案

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

根据javadoc , Integer.valueOf(123) 有不同之处在于它缓存对象...所以如果你调用它超过一次。

比如下面的代码:

   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 值,您使用的是原始类型(考虑到您的方法也在其签名上使用原始类型) - 它会使用更少的内存并且可能更快,但是您例如,不能将其添加到 Collection 中。

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

关于java - new Integer(123)、Integer.valueOf(123) 和 just 123 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9030817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com