何时在 Java 中使用基元和引用类型
2022-09-01 11:41:20
在哪种情况下,应该使用基元类型()或引用类型()?int
Integer
这个问题激发了我的好奇心。
在哪种情况下,应该使用基元类型()或引用类型()?
int
Integer
根据经验,我将使用基元(例如 ),除非我必须使用包装基元的类。int
其中一种情况是必须使用包装类,例如在使用泛型的情况下,因为Java不支持使用基元类型作为类型参数:Integer
List<int> intList = new ArrayList<int>(); // Not allowed.
List<Integer> integerList = new ArrayList<Integer>(); // Allowed.
而且,在许多情况下,我将利用自动装箱和取消装箱,因此我不必显式执行从基元到其包装类的转换,反之亦然:
// Autoboxing will turn "1", "2", "3" into Integers from ints.
List<Integer> numbers = Arrays.asList(1, 2, 3);
int sum = 0;
// Integers from the "numbers" List is unboxed into ints.
for (int number : numbers) {
sum += number;
}
另外,作为补充说明,当从基元转换为其包装类对象时,并且不需要对象的唯一实例时,请使用包装器方法提供的方法,因为它执行缓存并为某个值返回相同的实例,从而减少了创建的对象数:valueOf
Integer i1 = Integer.valueOf(1); // Prefer this.
Integer i2 = new Integer(1); // Avoid if not necessary.
有关这些方法的详细信息,Integer.valueOf 方法的
API 规范可以用作这些方法在基元的包装器类中的行为方式的参考。valueOf
这实际上取决于上下文。首先更喜欢原始,因为它更直观,开销更少。如果由于泛型/自动装箱原因而无法实现,或者如果您希望它为空,则选择包装器类型(您称之为复杂类型)。