2013-05-19 50 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我同意一個異常並不壞,但是當調試程序員時可能會感到困惑(特別是沒有經驗的人)。 –

相關問題