数组的等于方法实现 - Java

问题描述 投票:0回答:2

我很惊讶这个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表示数组长度。

提前致谢!

java equals overwrite
2个回答
3
投票

我很惊讶这等于方法工作..即使它使用.equals不再存在它的旧形式了,因为我已经覆盖了它

你已经覆盖了equals类的arrayClass方法。在你的equals实现中,你为数组的元素调用equals,这意味着你正在调用类的equals方法,它是elements数组的元素类型。例如,如果elementsString[]elements[i].equals()Stringequals


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;
© www.soinside.com 2019 - 2024. All rights reserved.