1

たとえば、文字配列を次のように初期化できます。

char[] myArray = new char[3];
myArray = {'a', 'b', 'c'};

または、文字配列を次のように初期化することもできます。

char[] myArray = {'a','b', 'c'};

「新しい」方法論を使用する利点は何ですか?

ちなみに、最初の例では、コンストラクターメソッド(括弧内)に渡さずに{...}セットを割り当てることができるのはなぜですか?

char[] myArray = new char[] {'a', 'b', 'c'};
4

6 に答える 6

2

{and}はショートカット構文であり、ここで配列の長さは、の間に指定された値の数によって決まります{ and }

配列からOracleドキュメント

配列を作成する1つの方法は、new演算子を使用することです。ArrayDemoプログラムの次のステートメントは、10個の整数要素に十分なメモリを備えた配列を割り当て、その配列をanArray変数に割り当てます。

// create an array of integers
anArray = new int[10];

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

int[] anArray = { 
100, 200, 300,
400, 500, 600, 
700, 800, 900, 1000
};
于 2012-09-11T05:13:29.133 に答える
1

コンパイル時の長さがわからない場合は、リテラル構文を使用できません。

char[] buffer = new char[bufferSize];

また、デフォルト値(0)で問題ない場合は、リテラル構文は必要ありません。

// hard to read, and I probably got the number of entries wrong
char[] buffer = { 0,0,0,0,0,0,0,0,0,0,0,0 };

// easier on the eyes
char[] buffer = new char[10];

「コンストラクター」で型宣言をスキップできる理由(それが配列の適切な用語であるかどうかはわかりません)については、コンパイラーがそれを推測できるためです。

于 2012-09-11T05:12:37.547 に答える
1

最初のステートメントは不正です。別の行でそのショートカットを使用して配列をインスタンス化してデータを設定することはできません。

使用に関してはnew-これにより、取得時に値を入力できます。唯一知られているのは、配列の長さの少なくとも1つの次元です。角かっこを使用することは、インスタンス化時に次元と配列に配置される内容の両方を知っていることを意味します。

于 2012-09-11T05:13:32.050 に答える
1

new with arrayを使用する主な利点は、配列のサイズはわかっているが、後で要素を使用して初期化する場合です。2番目の例では、配列に何を格納するかがわかっているので、その時点で新しいものは必要ありません。これらは基本的に、配列を宣言する2つの合法的な方法です。HTH、ベン

于 2012-09-11T05:13:34.177 に答える
1

terser構文が合法である場合でもnew、ステートメントが実行されるたびに新しいオブジェクトが作成されていることが明確になるため、構文を使用することをお勧めします。

于 2012-09-11T05:17:04.293 に答える
1

このステートメントは正当なJavaではありません。

    myArray = {'a', 'b', 'c'};

構文は、宣言または配列式の{ ... }初期化子としてのみ使用できます。JLSセクション§10.6newが言うように:

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

したがって、選択は実際には

char[] myArray = {'a','b', 'c'};

char[] myArray = new char[] {'a', 'b', 'c'};

2つの形式の違いは、純粋に構文上のものです。それらは同じことを意味し、この例では同じコードにコンパイルされることを期待しています。唯一の実際的な違いは、明示的なフォームはnew、他のフォームでは使用できないコンテキストで使用できることです。


ちなみに、最初の例では、コンストラクターメソッド(括弧内)に渡さずに{...}セットを割り当てることができるのはなぜですか?

Java配列型にはコンストラクターがないためです。

于 2012-09-11T06:00:20.440 に答える