Java 比较两个阵列时出现问题

Java 比较两个阵列时出现问题,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; }

我在玩一些代码,我不明白为什么我的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
    }
}
公共类等于{
静态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[]继承了那一个。

很好地捕捉到了阴影,我完全错过了它。谢谢你,这非常有帮助。