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

时间:2018-10-14 21:42:04

标签: java autoboxing

刚刚向我介绍了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 个答案:

答案 0 :(得分:1)

您的理解是正确的。

2004年在Java 5中引入自动装箱后,人们开始混淆Integerint。在此之前,您必须明确装箱和拆箱。自动装箱具有代码更简洁的优点,但也有一些缺点,即一些新手程序员无法准确了解正在发生的事情,因此会无意间编写不需要装箱和拆箱的代码。

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