3
private String[][] var[]

このコードはコンパイルされます。しかし、型または変数で配列を作成するべきではありませんか?

4

5 に答える 5

8

コードは次のとおりです。

private String[][][] var;

これらの形式はすべて同等です。

private String[][][] var;
private String[][] var[];
private String[] var[][];
private String var[][][];

これらはすべて同じ意味で、文字列の 3 次元配列です。構文は少し奇妙に見えるかもしれませんが、C/C++ プログラマーが Java に慣れるようにするためのものです(String var[][][]これは、C/C++ で配列型を通常宣言する方法です)。

Java では、のがisでString[][][] varあることが明確になるため、この構文が好まれます。他の構文とそのさまざまなバリエーションでは、型情報は変数の前後で分割されます。コンパイラの観点からは完全に合法ですが、読んだ。varString[][][]

さらに奇妙なことに、これらのメソッド宣言はすべて正当で同等です。

String[][][] m()  {return null;}
String[][] m() [] {return null;}
String[] m() [][] {return null;}
String m() [][][] {return null;}
于 2012-09-21T03:49:58.370 に答える
3

Java言語仕様によると

「ブラケットは、C および C++ の伝統へのうなずきとして、宣言子で許可されています。ただし、変数宣言の一般的な規則では、型と宣言子の両方でブラケットを使用できるため、ローカル変数の宣言が行われます。」

JLS 10.2で。私の意見では、「型」の角括弧 ( []) は、宣言された変数よりも配列を意味します。しかし、C/C++ の伝統を確認するために、テキストが JLS で言うように行われました。もう1つのことは、角括弧を型と変数の両方と混合すると、読者/プログラマーを混乱させることです.

于 2012-09-21T04:11:51.880 に答える
1

[]これは、位置によって違いが生じる場合を示す例です。

String[] arr, arr2[];

はのarr配列ですStringが、arr2は の配列の配列ですString

同じ行で異なる配列を宣言したい場合は、ご覧のとおり有益です。

そして、あなたの例ではvar2、同じ行で別の宣言がされている可能性があります:

private String[][] var[], var2;
于 2012-09-21T06:54:25.697 に答える
1

オスカーの答えはかなり良いです。英語で読むString[][] var[]としたら、「var は 2 次元の String 配列の配列です」、つまり「var は 3 次元の String 配列です」と言うでしょう。

于 2012-09-21T04:04:05.590 に答える