何时使用原语和Java中的引用类型

Gan*_*row 24 java reference-type primitive-types

在哪种情况下,您应该使用原始类型(int)或引用类型(Integer)?

这个问题引起了我的好奇心.

coo*_*ird 26

在哪种情况下,您应该使用原始类型(int)或引用类型(Integer)?

根据经验,int除非我必须使用包装基元的类,否则我将使用基元(例如).

其中一个案例是必须使用包装类,例如Integer在使用泛型的情况下,因为Java不支持使用基本类型作为类型参数:

List<int> intList = new ArrayList<int>();               // Not allowed.
List<Integer> integerList = new ArrayList<Integer>();   // Allowed.
Run Code Online (Sandbox Code Playgroud)

并且,在许多情况下,我将利用自动装箱和拆箱,因此我不必显式执行从基元到其包装类的转换,反之亦然:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

另外,作为补充说明,当从基元转换为其包装类对象时,并且不需要对象的唯一实例时,请使用valueOf包装器方法提供的方法,因为它执行缓存并为特定值返回相同的实例,从而减少创建的对象数:

Integer i1 = Integer.valueOf(1);   // Prefer this.
Integer i2 = new Integer(1);       // Avoid if not necessary.
Run Code Online (Sandbox Code Playgroud)

有关这些valueOf方法的更多信息,该方法的API规范Integer.valueOf可以作为这些方法在基元的包装类中的行为的参考.


Bal*_*usC 9

这实际上取决于背景.首先更喜欢原语,因为它更直观,开销更少.如果由于泛型/自动装箱原因不可能,或者您希望它可以为空,那么请选择包装类型(您称之为复杂类型).