5

次のコードは、JavaでStringの単純な配列を使用しています。

package javaarray;

final public class Main
{
    public void someMethod(String[] str)
    {
        System.out.println(str[0]+"\t"+str[1]);
    }
    public static void main(String[] args)
    {
        String[] str1 = new String[] {"day", "night"};
        String[] str2 = {"black", "white"};

        //Both of the above statements are valid.

        Main main=new Main();
        main.someMethod(str1);
        main.someMethod(str2);

        //We can invoke the method someMethod by supplying both of the above arrays alternatively.

        main.someMethod(new String[] { "day", "night" }); //This is also valid as obvious.
        main.someMethod({ "black", "white" }); //This is however wrong. The compiler complains "Illegal start of expression not a statement" Why?
    }
}

上記のコードスニペットでは、このように配列を初期化できます。

String[] str1 = new String[] {"day", "night"};
String[] str2 = {"black", "white"};

このように割り当てなくても、メソッドに直接渡すことができます。

main.someMethod(new String[] { "day", "night" });

その場合、次のステートメントも有効である必要があります。

main.someMethod({ "black", "white" });

しかし、コンパイラは「ステートメントではなく式の不正な開始」と文句を言います。なぜですか?

4

1 に答える 1

8

Java言語仕様(10.6。配列初期化子)によると

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

{"foo", "bar"}したがって、配列初期化子( )を使用する方法は2つしかありません。

  1. 変数宣言:String[] foo = {"foo", "bar"};
  2. 配列作成式:new String[] {"foo", "bar"};

配列初期化子をメソッドパラメータとして使用することはできません。

15.10。配列作成式

ArrayCreationExpression:
    新しいPrimitiveTypeDimExprsDimsopt
    新しいClassOrInterfaceTypeDimExprsDimsopt
    新しいPrimitiveTypeDimsArrayInitializer
    新しいClassOrInterfaceTypeDimsArrayInitializer
于 2012-04-12T03:48:12.920 に答える