我正在玩一些代码,我无法弄清楚为什么我的equals方法在两个数组相等时返回false。
public class Equal {
static int[] a;
public static boolean equals(int[] b){
for(int i=0;i<b.length;i++){
if(a[i] != b[i]) return false;
}
return true;
}
public static void main(String[] args){
int[] a = new int[3];
a[0]=1; a[1]=2; a[2]=3;
int[] b = new int[3];
b[0]=1; b[1]=2; b[2]=3;
System.out.println(a.equals(b)); //returns false (but why??)
System.out.println(Arrays.equals(a,b)); //returns true as expected
}
}
答案 0 :(得分:5)
因为数组类型从equals()
继承了java.lang.Object
方法,所以它被实现为
public boolean equals(Object obj) {
return (this == obj);
}
此外,这个static
字段
static int[] a;
被局部变量
遮蔽int[] a = new int[3];
同名。
答案 1 :(得分:5)
您没有调用您编写的equals
方法。您正在调用数组自己的equals
方法。打电话给你自己的功能:
System.out.println(equals(b));
您还需要更改以下行:
int[] a = new int[3];
分配给静态a
,或更改equals
以获取两个数组,而不是与静态a
数组进行比较。
答案 2 :(得分:3)
Callking a.equals()
不会调用您编写的方法。它会调用Int[].equals()
,它等于Object.equals()
,因为它[]继承了那个。{/ p>