等于数组的方法实现-Java

时间:2019-04-01 17:10:03

标签: java equals overwrite

令我惊讶的是,这种equals方法的工作原理..尽管它使用的是.equals,但由于我已经覆盖了它,因此不再以旧格式存在。

如果要看代码,我的意思是比较我正在使用的.equals的两个数组元素。

但是..如果我要覆盖equals方法,.equals不会只使用我覆盖的方法吗? 我有点困惑,我真的很希望能对它的工作原理有所解释。

public boolean equals(Object other) {
    if (other instanceof arrayClass) {
        arrayClass that = (arrayClass) other;
        if (this.number == that.number) {
            for (int i = 0; i < this.number; i++) {
                if (this.elements[i].equals(that.elements[i])) {

                }
                else {
                    return false;
                }
            }
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
}

注意:number代表数组的长度。

谢谢!

2 个答案:

答案 0 :(得分:3)

  

令我惊讶的是,这个equals方法可以工作..即使它使用了.equals,因为我已经覆盖了它,所以它不再以旧形式出现

您已经为equals类重写了arrayClass方法。在equals的实现中,您要为数组的元素调用equals,这意味着您要调用类的equals方法,该方法是{{1}的元素类型}数组。例如,如果elementselements,则String[]会调用elements[i].equals()的{​​{1}}。

答案 1 :(得分:2)

for循环内的equals调用未调用您的equals实现。您的实现是通过Array类进行的,并且for循环内的equals会针对存储在数组中的任何类类型调用equals实现。

此外,这段代码未进行优化。您可以在for循环中删除空块:

for(int i = 0; i < this.number; i++){
    if (!this.elements[i].equals(that.elements[i])) {
          return false;
    }
}
return true;