2016-06-12 100 views
1

Object[]可以存儲來自任何類的任何對象,因爲Java中的每個類都擴展爲java.lang.Object爲什麼Object []可以存儲基元?

我不認爲原始圖像從Object延伸,爲什麼我們可以像下面那樣存儲它們?

Object[] obj_arr = {1, 2, 1.2, 'a', false, new MyClass(), null}; 

的問題是,爲什麼原語存儲在對象數組並沒有自動裝箱在上面的代碼中發生與否?

+1

很確定你可以使用'instanceof'檢查自動裝箱,不是嗎? –

+0

運行代碼時,自動裝箱會將'1'和'2'更改爲其包裝類型。 – Meinkraft

+0

相關:http://stackoverflow.com/questions/27647407/why-do-we-use-autoboxing-and-unboxing-in-java –

回答

6

的原始類型得到自動裝箱到它們各自的包裝類型,所以例如:1成爲Integer.valueOf(1),這就是從Object擴展Integer類的實例,因此它可以被存儲到Object[]。對於其他原語也會發生同樣的情況 - 使用Double,CharacterBoolean的實例代替相應的原始值。

+6

實際上,自動裝箱不會用'new Integer(1)'替換'1',而用'Integer.valueOf(1)'替換'1',這會返回一個緩存的'Integer'對象。 – Jesper

相關問題