5

次のような構造の配列がある場合int:

private int[][] map = new int[400][400];

そして、私は取得しようとします

map[100][200]

その要素は初期化されていません。コンパイラ/ランタイム エラーが発生しますか、それとも null を返しますか? 特定の要素/インデックスが存在する/設定されているかどうかを確認する関数はありますか?

4

6 に答える 6

11

配列宣言はプリミティブ型であるため、コンパイラ エラーや実行時エラーは発生しません。デフォルト値の 0 が返されます。

配列がオブジェクトの配列であった場合、配列は、null特に割り当てられていない要素に対して保持されます。

于 2009-03-07T22:37:15.957 に答える
3

プリミティブ型なnullので戻りません。intデフォルトint値であるが返されます0

別のブール配列を保持する以外に、要素が設定されているかどうかを知る方法はありません。

于 2009-03-07T22:36:01.827 に答える
2

Java では、参照変数のみが null に初期化されます。プリミティブは、適切なデフォルト値を返すことが保証されています。int の場合、この値は 0 です。

于 2009-03-07T22:37:33.337 に答える
1

いいえ。

intこの場合、配列要素は s を保持するのに十分な大きさしかありません。要素が「存在する」かどうかに関する情報を保存する場所はありません。割り当てられているため、存在します。Java では、新しく割り当てられたint配列はすべての要素がゼロに初期化されます。

于 2009-03-07T22:35:37.723 に答える
0

少しデッドトピックですが、偶然見つけたので、私の知恵の一部を配置します(または何でも:P)。Arrays.Fill を使用して、-1 などの無効な値で作成された配列を埋めることができます。次に、 if x<0 を実行して、その特定の配列位置を初期化したかどうかを簡単に確認できます。ただのアイデア...

于 2011-03-22T15:00:54.673 に答える
0

ソースでcheckstylepmd、およびfindbugs (バイナリでは findbugs) を使用すると、次のようなことがわかります。

残念ながら、この特定の問題をキャッチしているようには見えません (これは、配列が各メンバーを 0、null、または false に設定することが保証されていることを意味します)。

これらのツールを使用すると、値が与えられる前に使用されているインスタンスおよびクラス メンバー (配列ではない) をキャッチできます (同様の問題)。

于 2009-03-07T22:43:52.027 に答える