次のような構造の配列がある場合int
:
private int[][] map = new int[400][400];
そして、私は取得しようとします
map[100][200]
その要素は初期化されていません。コンパイラ/ランタイム エラーが発生しますか、それとも null を返しますか? 特定の要素/インデックスが存在する/設定されているかどうかを確認する関数はありますか?
次のような構造の配列がある場合int
:
private int[][] map = new int[400][400];
そして、私は取得しようとします
map[100][200]
その要素は初期化されていません。コンパイラ/ランタイム エラーが発生しますか、それとも null を返しますか? 特定の要素/インデックスが存在する/設定されているかどうかを確認する関数はありますか?
配列宣言はプリミティブ型であるため、コンパイラ エラーや実行時エラーは発生しません。デフォルト値の 0 が返されます。
配列がオブジェクトの配列であった場合、配列は、null
特に割り当てられていない要素に対して保持されます。
プリミティブ型なnull
ので戻りません。int
デフォルトint
値であるが返されます0
。
別のブール配列を保持する以外に、要素が設定されているかどうかを知る方法はありません。
Java では、参照変数のみが null に初期化されます。プリミティブは、適切なデフォルト値を返すことが保証されています。int の場合、この値は 0 です。
いいえ。
int
この場合、配列要素は s を保持するのに十分な大きさしかありません。要素が「存在する」かどうかに関する情報を保存する場所はありません。割り当てられているため、存在します。Java では、新しく割り当てられたint
配列はすべての要素がゼロに初期化されます。
少しデッドトピックですが、偶然見つけたので、私の知恵の一部を配置します(または何でも:P)。Arrays.Fill を使用して、-1 などの無効な値で作成された配列を埋めることができます。次に、 if x<0 を実行して、その特定の配列位置を初期化したかどうかを簡単に確認できます。ただのアイデア...
ソースでcheckstyle、pmd、およびfindbugs (バイナリでは findbugs) を使用すると、次のようなことがわかります。
残念ながら、この特定の問題をキャッチしているようには見えません (これは、配列が各メンバーを 0、null、または false に設定することが保証されていることを意味します)。
これらのツールを使用すると、値が与えられる前に使用されているインスタンスおよびクラス メンバー (配列ではない) をキャッチできます (同様の問題)。