18

配列が次のように初期化されているのをよく目にします。

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

しかし、Language Basics-Arraysを読むと、短い構文ではコンストラクターを明示的にインスタンス化する必要がないことがわかります。

または、ショートカット構文を使用して、配列を作成および初期化することもできます。

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

したがって、次の2つの初期化方法を想定します。

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

これらの間に違いはありますか?どちらも同じように機能するようです。その場合、2番目のものが暗黙的にを呼び出し、new String[]最初のものがより冗長な方法であると想定する必要がありますか、それとも舞台裏でそれ以上のものがありますか?

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

4

3 に答える 3

19

2つの方法は同等です。ただし、簡潔な構文は変数宣言でのみ使用できることに注意してください。変数宣言の外部では、冗長構文を使用する必要があります。

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

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

詳細については、この回答を参照してください。

于 2013-03-02T17:43:58.080 に答える
7

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

最終結果に違いはありません。ただし、JLS§10.6に従い、すべてのコンテキストで配列初期化子シナクスを使用できるわけではありません。

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

于 2013-03-02T17:44:08.217 に答える
0

配列は変更可能であることが意図されているため、それぞれが新しいインスタンスであることは理にかなっています

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

つまり、変更array1は影響しませんarray2

于 2013-03-02T17:51:19.563 に答える