编写一个equals方法来比较两个数组

时间:2017-11-01 21:05:21

标签: java methods equals

我有以下代码,我相信在我的equals方法中有些东西是关闭但我无法弄清楚是什么问题。

public class Test {
    private double[] info;
    public Test(double[] a){
        double[] constructor = new double[a.length];        
        for (int i = 0; i < a.length; i++){
                constructor[i] = a[i];
        }       
        info = constructor;
    }

    public double[] getInfo(){      
        double[] newInfo = new double[info.length];     
        for(int i = 0; i < info.length; i++){
            newInfo[i] = info[i];
        }   
        return newInfo;
    }
    public double[] setInfo(double[] a){
        double[] setInfo = new double[a.length];    
        for(int i = 0; i < a.length; i++){
            setInfo[i] = a[i];
        }
        return info;
    }
    public boolean equals(Test x){
        return (this.info == x.info);
    }
}

在我的测试人员课程中,我有以下代码:

public class Tester {

    public static void main(String[] args) {
        double[] info = {5.0, 16.3, 3.5 ,79.8} 
        Test test1 = new Test();
        test 1 = new Test(info);
        Test test2 = new Test(test1.getInfo());
        System.out.print("Tests 1 and 2 are equal: " + test1.equals(test2));
    }
}

我的其余方法似乎正常运行,但是当我使用我的equals方法并打印布尔值时,控制台会在打印为true时打印出false。

1 个答案:

答案 0 :(得分:1)

您只是将内存引用与数组进行比较。您应该比较数组的内容。

首先比较每个数组的长度,然后如果它们匹配,则一次一个项目的整个内容。

这是一种方法(不使用帮助器/实用程序函数编写,因此您了解正在发生的事情):

public boolean equals(Test x) {

    // check if the parameter is null
    if (x == null) {
        return false;
    }

    // check if the lengths are the same
    if (this.info.length != x.info.length) {
        return false;
    }

    // check the elements in the arrays
    for (int index = 0; index < this.info.length; index++) {
        if (this.info[index] != x.info[index]) {
            return false;
        } Aominè
    }

    // if we get here, then the arrays are the same size and contain the same elements
    return true;
}

正如@Aominè在上面评论的那样,您可以使用辅助/实用功能,例如(但仍需要空检查):

public boolean equals(Test x) {

    if (x == null) {
        return false;
    }

    return Arrays.equals(this.info, x.info);
}