我有整数数组:
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
,但为什么我总是假的?我正在进行比较吗?
答案 0 :(得分:7)
你在数组上调用equals
- 它只会通过 reference 进行比较,因为数组不会覆盖equals
。您希望Arrays.equals(int[], int[])
比较数组中的值。
(在这种情况下,当您处理deepEquals
时,您不需要int[]
- 实际上调用deepEquals
无法编译,因为int[]
不是不是Object[]
。)
答案 1 :(得分:2)
答案 2 :(得分:0)
根据java.sun.com 类Object的equals方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true)。 它不会对大多数类执行智能比较,除非该类重写它。对于大多数Java核心类,它已经以有意义的方式定义。如果没有为(用户)类定义它,它的行为与==相同。 所以试试Arrays.equals(arrB5,arrA)。