equals
String 类中方法的代码是
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(),我们可以立即看到两个字符串不相等。
我只是认为使用 hashCode() 可以成为一个很好的过滤器equals
。
更新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;
}