数组的 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
数组。例如,如果 elements
是 String[]
,elements[i].equals()
调用 String
的 equals
。
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;
我很惊讶这个 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
数组。例如,如果 elements
是 String[]
,elements[i].equals()
调用 String
的 equals
。
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;