刚刚向我介绍了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相加,然后将自身自动装箱为整数对象吗?我的理解正确吗?

最佳答案

您的理解是正确的。

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

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

关于java - Java中的快速装箱/自动拆箱问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52807352/

10-11 05:02
查看更多