2013-03-02 62 views
13

我經常看到數組初始化是這樣的:使用值初始化數組 - 我應該顯式地實例化類嗎?

String[] array = new String[] { "foo", "bar", "baz" }; 

但看完Language Basics - Arrays表明短期語法不需要明確實例化的構造器:

或者,也可以使用快捷語法創建和 初始化數組:

int[] anArray = { 
    100, 200, 300, 
    400, 500, 600, 
    700, 800, 900, 1000 
}; 

因此,假設初始化這兩種方法:

String[] array = new String[] { "foo", "bar", "baz" }; 
String[] array2 = { "foo", "bar", "baz" }; 

有它們之間有什麼區別?兩者似乎都是一樣的,在這種情況下,我應該假設第二個隱含地稱爲new String[],第一個只是一個更詳細的方式,或者是幕後更多?

從Java開始,所以很抱歉,如果這是一個問題太愚蠢,但我在網上找不到任何關於這個。

回答

13

這兩種方法是等價的。但請注意,簡明語法只能用於變量聲明。外面的變量聲明,你必須使用詳細的語法:

String[] array; 
    array = new String[] { "foo", "bar", "baz" }; // OK 

    String[] array2; 
    array2 = { "foo", "bar", "baz" };    // ERROR 

如需進一步討論,請參見this answer

6

這些有什麼區別嗎?

最終結果沒有差異。然而,由於每the JLS § 10.6, you cannot use the array initializer synax in every context.

數組初始化可在聲明(§8.3§9.3§14.4)來指定,或作爲陣列創建表達式(§15.10),以建立一個數組,並提供一些初始值的一部分。

+1

我喜歡spec鏈接,非常感謝。但是我相信NPE的答案對於未來的Java初學者來說可能會更清楚/更簡單,可能會讀到這個問題。無論如何都是+1。 '=]' – 2013-03-02 17:49:23

0

由於陣列是旨在是可變的,它是有道理的每一個是一個新的實例

String[] array1 = { "foo", "bar", "baz" }; 
String[] array2 = { "foo", "bar", "baz" }; 

即修改array1不會影響array2

+1

我有一個體面的面向對象的基礎,並且明白每個數組都是一個新的實例,問題是'新的String []'在數組的初始化中是否有所不同。 – 2013-03-02 17:53:14