何时在 Java 中使用基元和引用类型

2022-09-01 11:41:20

在哪种情况下,应该使用基元类型()或引用类型()?intInteger

这个问题激发了我的好奇心。


答案 1

在哪种情况下,应该使用基元类型()或引用类型()?intInteger

根据经验,我将使用基元(例如 ),除非我必须使用包装基元的类。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


答案 2

这实际上取决于上下文。首先更喜欢原始,因为它更直观,开销更少。如果由于泛型/自动装箱原因而无法实现,或者如果您希望它为空,则选择包装器类型(您称之为复杂类型)。


推荐