5
package arraypkg;

import java.util.Arrays;

public class Main
{
    private static void foo(Object o[])
    {
        System.out.printf("%s", Arrays.toString(o));
    }

    public static void main(String[] args)
    {
       Object []o=new Object[]{1,2,3,4,5};
       foo(o);                     //Passing an array of objects to the foo() method.

       foo(new Object[]{6,7,8,9}); //This is valid as obvious.

       Object[] o1 = {1, 2};      //This is also fine.
       foo(o1);

       foo({1,2});               //This looks something similar to the preceding one. This is however wrong and doesn't compile - not a statement.
    }
}

前のコード スニペットでは、最後の式を除くすべての式がコンパイルされ、正常に実行されます。最後のステートメントはその直後のステートメントと似ていますが、コンパイラーはステートメントではなく、コンパイル時エラー (不正な式の開始) を発行します。なんで?

4

3 に答える 3

9
foo({1,2});

{1, 2} この種の配列の初期化は、配列を宣言している場所でのみ機能します。他の場所では、newキーワードを使用して作成する必要があります..

それが理由です: -

Object[] obj = {1, 2};

大丈夫でした..これは、配列のタイプがreferenceLHSで使用するタイプによって暗示されるためです..しかし、他の場所で使用している間、コンパイラはタイプを見つけることができません(あなたの場合のように)..

使ってみてください: -

  foo(new Object[]{1,2});
于 2012-10-09T17:48:49.347 に答える
3

foo({1,2}); それがどのタイプの配列であるかはわかりません。そのため、コンパイラは構文を理解できません。他のすべての宣言は、配列のタイプを指定します。

于 2012-10-09T17:49:58.887 に答える
1

foo({1,2});配列ではありません。

また、foo() メソッドが配列型パラメーターを取るため、これは失敗します。

于 2012-10-09T17:53:05.783 に答える