数组的 Equals 方法实现 - Java

Equals method implementation for arrays - Java

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

提前致谢!

I'm surprised this equals method works.. even though its using .equals which does not exist anymore in it's old form anymore since I've overwritten it

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

for 循环内的 equals 调用未调用您的 equals 实现。您的实现是在数组 class 上进行的,并且 for 循环内的 equals 正在为您存储在数组中的任何 class 类型调用 equals 实现。

另外,这段代码没有优化。您可以删除 for 循环内的空块:

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