令我惊讶的是,这种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
代表数组的长度。
谢谢!
答案 0 :(得分:3)
令我惊讶的是,这个equals方法可以工作..即使它使用了.equals,因为我已经覆盖了它,所以它不再以旧形式出现
您已经为equals
类重写了arrayClass
方法。在equals
的实现中,您要为数组的元素调用equals
,这意味着您要调用类的equals
方法,该方法是{{1}的元素类型}数组。例如,如果elements
是elements
,则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;