次のプログラム:
final int[] a1 = { 1 };
final int[] a2 = { 1 };
final int[] a3 = a1;
System.out.println("a1.equals(a2): " + a1.equals(a2));
System.out.println("a1.equals(a3): " + a1.equals(a3));
出力:
a1.equals(a2): false
a1.equals(a3): true
あなたのメッセージに関して:
私の理解では、int[] のequals
andhashCode
メソッドは、int 配列への参照のコンテンツまたはポインター値を尊重するように実装されていません。
これは、equals
とhashCode
がポインタ値を尊重するが、値は尊重しないことを意味します。
Java があなたのint[]
.
- あなたが
HashSet
複数のスレッドから埋めている場合。HashSet
同期されていません。次のように作成する必要があります: Collections.synchronizedSet(new HashSet<int[]>())
. 何百万ものオブジェクトがあるため、追加時に衝突が発生する可能性は非常に高くなります。
- 配列は変更可能なオブジェクトです。読み取り時に古い配列インスタンスを使用している場合、プログラムにバグがある可能性があります。