刚刚向我介绍了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相加,然后将其自身自动装箱为整数对象吗?我的理解正确吗?
答案 0 :(得分:1)
您的理解是正确的。
2004年在Java 5中引入自动装箱后,人们开始混淆Integer
和int
。在此之前,您必须明确装箱和拆箱。自动装箱具有代码更简洁的优点,但也有一些缺点,即一些新手程序员无法准确了解正在发生的事情,因此会无意间编写不需要装箱和拆箱的代码。
顺便说一句,您的new Integer(2)
示例更好地编码为Integer.valueOf(2)
。后者将使用缓存的对象,而不是创建一个新的对象。