2013-05-19 63 views
2

据我所知,可以将一个Integer对象添加到类型为IntegerArrayList。这对我来说很有意义。就像这样:为什么允许将基本数据类型添加到ArrayList?

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

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

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

为什么允许?

回答

16

这叫做autoboxing。对于具有相应基元的类(例如,Longlong,Integerint),Java将为您处理转换。

应当注意这种行为带有一些阴暗的角落:

  1. 的性能损失;
  2. 案例:当null拆箱到一个原语中时,NullPointerException将被抛出,这可能是程序员意想不到的,因为它看起来像一个原语抛出异常。
+0

+1更多信息:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html –

+0

拆箱空应该是难以觉察罕见,我宁愿得到一个异常,如果我把一个null,因为这通常不是你想要的代码。 – confusopoly

+2

@confusopoly我同意一个异常并不坏,但是当调试程序员时可能会感到困惑(特别是没有经验的人)。 –

相关问题