gpt4 book ai didi

java - 了解 ArrayList 中的自动装箱(Big Java 第 7.3 节)

转载 作者:行者123 更新时间:2023-11-30 07:14:28 24 4
gpt4 key购买 nike

这里是 Java 初学者。我在我的书中我们谈论ArrayLists的部分我的书刚刚给了我一个很酷的例子 ArrayListStrings

现在令我惊讶的是它实际上是这样说的

Because numbers are not objects in Java, you cannot directly insert them into arraylists. For example, you cannot form an ArrayList<double>.

相反,我们需要对所有八种基本类型使用包装类。我的书中给出了一些对我来说似乎很奇怪的小例子,让我们看以下内容。

这是自动装箱,它将我们的d成一个物体。我想我们可以将其视为 Double d = new Double(29.95);

Double d =  29.95

我们可以通过 double x = d; 来拆箱它,所以现在x只是一个值,对吗?

这就是我的困惑所在。我注意到我们可以用 Double 做一些算术表达式目的说d = d+1

我的书上说

Here d is Auto-unboxed into a double

We add 1 to it

Then Auto-box the result into a new Double

Store a reference to the newly created wrapper object in d

我的问题

最后一部分是我无法理解的。这是什么意思?我记得在第四章中我们了解到,当我们将两个对象设置为彼此相等时,当我们更改一个对象时,另一个对象也会更改(我相信这被称为 by reference )

另一方面,我为什么要做这样的算术呢?如果我们必须先拆箱再装箱,这看起来效率 super 低。我想说首先使用普通数组

最佳答案

d = d + 1 其中 dDouble 本质上意味着 d = Double.valueOf(d.doubleValue() + 1);,即为结果分配一个新值。隐式添加 Double.valueOfd.doubleValue 本质上就是自动装箱(它可以是 new Double 而不是 Double.valueOf ,但含义保持不变)。

类似地,double x = d 表示 double x = d.doubleValue()

作为一个好的实践,我建议将自动装箱更改为显式类型转换,例如使用.doubleValue()Double.valueOf。任何 IDE 都会帮助您检测这些错误,并且通过显式定义转换,一些错误(通常是 NPE)可能会变得更加明显。

关于java - 了解 ArrayList 中的自动装箱(Big Java 第 7.3 节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38683982/

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