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

我知道可以将Integer对象添加到Integer类型的ArrayList中。 这对我来说很有意义。 喜欢这个:

 ArrayList list = new ArrayList(); list.add(new Integer(3)); 

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

 ArrayList list = new ArrayList(); list.add(3); 

为什么允许?

这称为autoboxing 。 对于具有相应原语的类(例如, Long – > longInteger – > int ),Java将为您处理转换。

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

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