Код метода 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 может выглядеть как
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;
}