Java 比较两个阵列时出现问题
我在玩一些代码,我不明白为什么我的equals方法在两个数组相等时返回falseJava 比较两个阵列时出现问题,java,Java,我在玩一些代码,我不明白为什么我的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 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
}
}
公共类等于{
静态int[]a;
公共静态布尔等于(int[]b){
对于(int i=0;i,因为数组类型从java.lang.Object
继承其equals()
方法
public boolean equals(Object obj) {
return (this == obj);
}
此外,此静态字段
static int[] a;
被局部变量遮挡
int[] a = new int[3];
同名。您没有调用您编写的equals
方法。您正在调用数组自己的equals
方法。调用您自己的函数:
System.out.println(equals(b));
您还需要更改以下行:
int[] a = new int[3];
分配给静态a
,或将equals更改为两个数组,而不是与静态a
数组进行比较。调用a.equals()
不会调用您编写的方法。它会调用Int[].equals()
,这等于对象.equals()
,因为Int[]继承了那一个。很好地捕捉到了阴影,我完全错过了它。谢谢你,这非常有帮助。