String类中equals
方法的代码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
我有一个问题-为什么这个方法不使用hashCode()?
据我所知,hashCode()可以快速比较两个字符串。
更新:我知道,两个不相等的字符串可能具有相同的散列值。但是,两个相等的字符串具有相等的散列值。因此,通过使用hashCode(),我们可以立即看出两个字符串是否不相等。
我只是认为在equals中使用hashCode()可以成为一个良好的过滤器。
更新2:这里是一些我们正在讨论的代码示例。
这是一个String方法equals可能看起来像的示例
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
if (hashCode() == anotherString.hashCode()){
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}else{
return false;
}
}
return false;
}