繁体   English   中英

比较两个数组时遇到麻烦

[英]Trouble comparing two Arrays

我正在研究一些代码,但无法弄清楚为什么当两个数组相等时我的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
    }
}

因为数组类型是从java.lang.Object继承其equals()方法的,所以将其实现为

public boolean equals(Object obj) {
    return (this == obj);
}

而且,这个static字段

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() ,它等于Object.equals()因为Int []继承了那个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM