gpt4 book ai didi

java - 原语与包装类初始化

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:05 25 4
gpt4 key购买 nike

如下声明 int 有什么区别。不同类型适合使用的案例有哪些

int i     = 20;
Integer i = 20;
Integer i = new Integer(20);

请注意:我仔细观察了一下,发现第一个是创建原始int。第二个是进行自动装箱,第三个是在内存中创建引用。

我正在寻找一个场景,它清楚地解释了我应该何时使用第一种、第二种和第三种整数初始化。互换使用是否会对性能产生影响

感谢回复。

最佳答案

第一种情况下的初始化是一个简单的常数值赋值。没有什么有趣的......除了这是一个正在分配的原始值,原始值没有“身份”;即 int20 的所有“副本”都是相同的。

第二种和第三种情况更有趣一些。第二种形式使用“拳击”,实际上等同于:

Integer i = Integer.valueOf(20);

valueOf方法可能创建一个新对象,或者它可能返回对先前存在的对象的引用。 (事实上​​,JLS 保证 valueOf 将缓存 -128..+127 ... 范围内数字的 Integer 值)

相比之下,new Integer(20) 总是 创建一个新对象。

如果您习惯于使用 == 比较 Integer 包装器对象(或类似对象),那么这个关于新对象(或不新对象)的问题很重要。在一种情况下,如果比较“20”的两个实例,== 可能是 true。在另一种情况下,它保证为 false

类(class):使用 .equals(...) 来比较包装类型而不是 ==


关于使用哪个的问题:

  • 如果iint,使用第一种形式。
  • 如果 iInteger,则第二种形式是最好的...除非您需要一个 != 到其他实例。装箱(或显式调用 valueOf)减少了小值的对象分配量,是值得优化的。

关于java - 原语与包装类初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074480/

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