2013-03-02 22 views
13

私は、多くの場合、配列は次のように初期化されて参照してください。また配列を値で初期化する - クラスを明示的にインスタンス化する必要がありますか?

、ショートカット構文を使用することができます。

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

しかしLanguage Basics - Arraysを読んで短い構文が明示的にコンストラクタをインスタンス化必要としないことを示します

int[] anArray = { 
    100, 200, 300, 
    400, 500, 600, 
    700, 800, 900, 1000 
}; 
01:初期化 アレイを作成します

ので、初期のこれらの2つの方法と仮定:

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

すると、これらの間のいずれかの違いはありますか?両方とも同じように動作しているようです。その場合、2番目のものが暗黙的にnew String[]と呼ばれ、最初のものがもっと冗長な方法であると仮定しなければなりませんか?

Javaで始めると、これはあまりにも愚かな質問ですが、Webでこれについて何も見つかりませんでした。

答えて

13

2つの方法は同等です。ただし、簡潔な構文は変数宣言でのみ使用できます。 this answerを参照して、さらに議論について

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

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

:変数宣言の外であなたは冗長な構文を使用する必要があります。

6

これらの違いはありますか?

最終結果に差はありません。しかし、the JLS § 10.6, you cannot use the array initializer synax in every context.

に従って配列初期化子は、アレイを作成し、いくつかの初期値を提供するために、宣言(§8.3§9.3§14.4)、または配列生成式(§15.10)の一部として指定することができます。

+1

私はスペックリンクが大好きです、ありがとうございます。しかし、私は、NPEの答えは、将来のJavaの初心者にとって、この質問を読むようになるかもしれないので、より明確で簡単だと信じています。いずれにしても+1になります。 '=]' –

0

アレイはが可変であることをを意図されているので、それぞれがあるという意味新しいインスタンス

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

、すなわちarray1を修正するarray2に影響を及ぼさないであろうことができます。

+1

私はまともなオブジェクト指向の基盤を持ち、各配列が新しいインスタンスであることを理解しています。問題は、 'new String []'が配列の初期化に何らかの違いを生じたかどうかです。 –

関連する問題