Java 中的快速 autoboxing/auto-unboxing 问题
Quick autoboxing/auto-unboxing question in Java
我刚刚在 Java 中了解到自动装箱的概念,我有几个简单的问题可以帮助我澄清我的理解。据我了解,当我们声明一个数组列表时,例如
ArrayList<Integer> myList = new ArrayList<Integer>();
我们仍然可以将原始整数放入 myList
中,因为原始整数会自动包装到 Integer
对象中。我猜这意味着如果我尝试向此 ArrayList 添加一个 Integer
对象,那么不会有任何自动装箱,因为我正在添加 'correct' 类型?换句话说,我猜命令
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 中引入自动装箱时,人们开始混淆 Integer
和 int
。在此之前,您必须明确地装箱和拆箱。自动装箱的优点是代码更简洁,但也有一些缺点,即一些新手程序员没有意识到到底发生了什么,并且无意中编写了不必要的装箱和拆箱代码。
顺便说一下,您的 new Integer(2)
示例最好编码为 Integer.valueOf(2)
。后者将使用缓存对象而不是创建新对象。
我刚刚在 Java 中了解到自动装箱的概念,我有几个简单的问题可以帮助我澄清我的理解。据我了解,当我们声明一个数组列表时,例如
ArrayList<Integer> myList = new ArrayList<Integer>();
我们仍然可以将原始整数放入 myList
中,因为原始整数会自动包装到 Integer
对象中。我猜这意味着如果我尝试向此 ArrayList 添加一个 Integer
对象,那么不会有任何自动装箱,因为我正在添加 'correct' 类型?换句话说,我猜命令
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 中引入自动装箱时,人们开始混淆 Integer
和 int
。在此之前,您必须明确地装箱和拆箱。自动装箱的优点是代码更简洁,但也有一些缺点,即一些新手程序员没有意识到到底发生了什么,并且无意中编写了不必要的装箱和拆箱代码。
顺便说一下,您的 new Integer(2)
示例最好编码为 Integer.valueOf(2)
。后者将使用缓存对象而不是创建新对象。