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};

并且所有的arrBs 都被添加到列表中,如下所示:

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数组 - 它只会按引用进行比较,因为数组不会覆盖equals。您想要Arrays.equals(int[], int[])比较数组中的值。

(在这种情况下,您不需要deepEquals处理int[]- 并且确实调用deepEquals不会编译,因为 anint[]不是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 方法实现了对象上最有区别的可能等价关系;也就是说,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象(x == y 的值为 true)时,此方法才返回 true。除非该类覆盖它,否则它不会对大多数类执行智能比较。对于大多数 Java 核心类,它已经以一种有意义的方式定义。如果它没有为(用户)类定义,它的行为与 == 相同。所以试试 Arrays.equals(arrB5,arrA)。

于 2013-08-11T07:59:01.563 回答