无法比较两个阵列

时间:2014-02-05 02:45:32

标签: 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 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
    }
}

3 个答案:

答案 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>