2010-05-18 68 views
2

會(1)int a; new Object[] {a}與(2)new Object[] {new Integer(a)}相同嗎? 如果我做第一個,(new Object[]{a})[0]會給我一個Integer? 謝謝將int放入對象數組之後,我得到一個Integer或int嗎?

+1

你可以測試你的第二個問題。 – 2010-05-18 17:59:12

+0

那些大括號是什麼? – Vishal 2010-05-18 18:16:46

+0

@Vishal:這是如何在Java中定義數組文字。 – Syntactic 2010-05-18 18:26:42

回答

9

是的,是的。

實際上,您不能將int放入Object[]。你正在做的是利用Java的特性autoboxing,其中像int這樣的基本類型被自動提升爲其相應的包裝類(在這種情況下爲Integer),或者反之亦然。

您可以閱讀更多關於此here

編輯:

正如加斯帕在下面的評論指出,在回答你的第一個問題,其實並不是「是」,但「這取決於a值」。像在(2)中那樣調用構造函數Integer(int)總是導致創建新的Integer對象並將其放入數組中。在(1)中,自動裝箱過程不會使用這個構造函數;但是,在(1)中,自動裝箱過程不會使用這個構造函數。它基本上會撥打Integer.valueOf(a)。這可以創建一個新的Integer對象,也可以返回預先存在的緩存Integer對象,以節省時間和/或存儲,取決於a值。特別是-128到127之間的值被這樣緩存。

在大多數情況下,這不會產生重大影響,因爲Integer對象是不可變的。如果要創建大量的Integer對象(顯着多於256個),並且大多數對象都在-128和127之間,則示例(1)可能會比(2)更快並佔用更少的內存。

+0

不完全; autoboxing不使用'new Integer(...)',但是'Integer.valueOf(...)'略有不同。請注意,'Integer.valueOf(...)'並不總是返回一個新的'Integer'對象;它具有-128到127之間的值的緩存。 – Jesper 2010-05-19 08:03:05

0

下面發生了什麼是Java編譯器添加代碼如Integer.valueOf(a)以便將您的int值轉換爲Object。