为什么允许将原始数据类型添加到ArrayList?
我知道可以将Integer对象添加到Integer类型的ArrayList
中。 这对我来说很有意义。 喜欢这个:
ArrayList list = new ArrayList(); list.add(new Integer(3));
但为什么可以添加像int而不是Integer
这样的原始数据类型? 喜欢这个:
ArrayList list = new ArrayList(); list.add(3);
为什么允许?
这称为autoboxing
。 对于具有相应原语的类(例如, Long
– > long
, Integer
– > int
),Java将为您处理转换。
应该注意这种行为伴随着一些黑暗的角落:
- 绩效惩罚;
- 极端情况:当
null
被取消装入基元时,将抛出NullPointerException
,这对于程序员来说可能是意外的,因为它看起来像是一个基元抛出exception。