Java中的快速自动装箱/自动拆箱问题

Posted

技术标签:

【中文标题】Java中的快速自动装箱/自动拆箱问题【英文标题】:Quick autoboxing/auto-unboxing question in Java 【发布时间】:2018-10-14 21:42:04 【问题描述】:

我刚刚了解了 Java 中自动装箱的概念,我有几个简单的问题可以帮助我澄清我的理解。据我了解,当我们声明一个数组列表时,例如

ArrayList<Integer> myList = new ArrayList<Integer>();

我们仍然可以将原始整数放入 myList 中,因为原始整数将自动包装到 Integer 对象中。我猜这意味着如果我尝试向这个 ArrayList 添加一个Integer 对象,那么由于我添加了“正确”类型,所以不会有任何自动装箱?也就是说,我猜是命令

myList.add(new Integer(2));

不使用任何自动装箱。同样,我猜想从这个 ArrayList 中检索元素并将它们存储在它们的包装器中不需要自动装箱,因为我没有将它们放在它们的原语中?又名:

Integer a = myList.get(0);

不拆箱?据我了解,当我尝试将原语混合到图片中时会发生拆箱:

int b = 4;
Integer c = a + b;

在这种情况下,我认为 a 会自动拆箱成一个 int 原语,加上 int b 然后自动将自己装箱成一个整数对象?我的理解是否正确?

【问题讨论】:

是的,这一切看起来都是正确的。 您是否有一个确切的问题,或者您想要一个是/否的答案? 【参考方案1】:

你的理解是正确的。

当 2004 年在 Java 5 中引入自动装箱时,人们开始混淆 Integerint。在此之前,您必须明确地装箱和拆箱。自动装箱的优点是代码更简洁,但也有一些缺点,即一些新手程序员没有意识到正在发生的事情,并在不知不觉中编写了不必要的装箱和拆箱的代码。

顺便说一下,new Integer(2) 的示例最好编码为Integer.valueOf(2)。后者将使用缓存对象而不是创建新对象。

【讨论】:

以上是关于Java中的快速自动装箱/自动拆箱问题的主要内容,如果未能解决你的问题,请参考以下文章

如何理解Java中的自动拆箱和自动装箱?

详解 Java 中的自动装箱与拆箱,5000+字,看了不懂你打我

java 啥是拆箱和装箱,拆箱和装箱 嘛用啊???

Java中的自动装箱与拆箱

Java语法糖2:自动装箱和自动拆箱

java 自动装箱和拆箱