string类重写equal方法了吗

如题所述

回是,Java中的String类重写了equals方法。
在Java中,每一个对象都继承自Object类,Object类中提供了一个默认的equals方法。这个默认方法使用“==”比较两个对象的引用,也就是说,当且仅当两个引用指向同一个对象时,返回true。然而,对于许多类来说,这种比较方式并不合适。例如,对于String类,我们更希望比较两个字符串的内容是否相同,而不是它们是否指向同一个字符串对象。
因此,String类重写了equals方法,新的equals方法比较的是两个字符串的内容是否相同。具体来说,String类的equals方法会逐个字符地比较两个字符串的内容,如果所有字符都相同,那么这两个字符串就被认为是相等的。
以下是String类的equals方法的示例代码:
java
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;
}
此外,需要注意的是,当我们重写equals方法时,通常也需要重写hashCode方法,以维护equals方法和hashCode方法之间的契约:如果两个对象根据equals(Object)方法是相等的,那么调用这两个对象的hashCode方法必须产生相同的整数结果。这也是Java的约定,否则,例如在使用HashMap等数据结构时,可能会产生意外的结果。String类也遵守了这个约定,重写了hashCode方法。
温馨提示:答案为网友推荐,仅供参考