equals()方法是Object类中的重写方法。并且在覆盖中,不允许更改签名。但是String.equals()比较字符串值,而Object.equals()比较参考值。那么两个类的签名是否不同?还是内部如何完成?
两个类的签名相同,但是实现不同。对于对象类:
public boolean equals(Object obj) {
return (this == obj);
}
对于String类,实现是:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
因此,当您调用String对象的equals方法时,它将调用该方法的重写版本,即在String类内部实现