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 中引入自动装箱时,人们开始混淆 Integer
和 int
。在此之前,您必须明确地装箱和拆箱。自动装箱的优点是代码更简洁,但也有一些缺点,即一些新手程序员没有意识到正在发生的事情,并在不知不觉中编写了不必要的装箱和拆箱的代码。
顺便说一下,new Integer(2)
的示例最好编码为Integer.valueOf(2)
。后者将使用缓存对象而不是创建新对象。
【讨论】:
以上是关于Java中的快速自动装箱/自动拆箱问题的主要内容,如果未能解决你的问题,请参考以下文章