2

私は整数の配列を持っています:

int[] arrA = {1,2,3,4,5,6,7,8,9};
int[] arrB1= {7,3,4,1,5,8,9,2,6};
int[] arrB2= {9,5,1,4,7,6,8,2,3};
int[] arrB3= {4,6,1,3,8,9,5,7,2};
int[] arrB4= {2,3,1,5,8,9,4,6,7};
int[] arrB5= {1,2,3,4,5,6,7,8,9};

次のように、すべてarrBの がリストに追加されます。

List<int[]> list= new ArrayList<int[]>();

list.add(arrB1);
list.add(arrB2);
list.add(arrB3);
list.add(arrB4);
list.add(arrB5);

配列の等価性を配列のリストと比較したいのですが、arrA次のコードを使用してそれを行いました。

boolean isEqual=false;
for(int index=0; index<list.size(); index++){
    if(list.get(index).equals(arrA)){
          isEqual=true;
    }
    System.out.println(isEqual);
}

私はそれarrB5が等しいことを知っていますarrAが、なぜ私はいつも偽になるのですか? 私は比較を正しく行っていますか?

4

3 に答える 3

7

配列を呼び出しています-配列はオーバーライドしないため、参照equalsによって比較するだけです。配列内の値を比較したい。equalsArrays.equals(int[], int[])

deepEquals(この場合、あなたが扱っているので必要ありませんint[]- 実際、 は ではないため、呼び出しdeepEqualsはコンパイルされint[]ませんObject[]。)

于 2013-08-11T07:47:14.133 に答える
2

Apache CommonsのArrayUtils.isEquals()はまさにそれを行います。また、多次元配列も処理します。

あなたも試してみるべきですArrays.deepEquals(a, b)

于 2013-08-11T07:47:03.357 に答える
0

java.sun.com によると、クラス Object の equals メソッドは、オブジェクトに対して最も識別可能な等価関係を実装します。つまり、null 以外の参照値 x と y の場合、このメソッドは、x と y が同じオブジェクトを参照している (x == y の値が true) 場合にのみ true を返します。クラスがそれをオーバーライドしない限り、ほとんどのクラスのインテリジェントな比較は実行されません。これは、ほとんどの Java コア クラスに対して意味のある方法で定義されています。(ユーザー) クラスに対して定義されていない場合は、== と同じように動作します。Arrays.equals(arrB5,arrA) を試してください。

于 2013-08-11T07:59:01.563 に答える