为什么允许将原始数据类型添加到ArrayList?

use*_*314 3 java generics integer object primitive-types

我知道可以将Integer对象添加到ArrayList类型中Integer.这对我来说很有意义.像这样:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(new Integer(3));
Run Code Online (Sandbox Code Playgroud)

但为什么可以添加像int这样的原始数据类型而不是Integer?像这样:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3);
Run Code Online (Sandbox Code Playgroud)

为什么允许?

zw3*_*324 16

这叫做autoboxing.对于具有相应原语的类(例如,Long- > long,Integer- > int),Java将为您处理转换.

应该注意这种行为伴随着一些黑暗的角落:

  1. 绩效惩罚;
  2. 极端情况:当null取消装入基元时,NullPointerException将抛出一个,这对于程序员来说可能是意外的,因为它看起来像一个基元抛出异常.

  • @confusopoly我同意一个异常也不错,但是在调试时程序员可能会感到困惑(特别是没经验的人). (2认同)