Le code de l' equals
méthode de la classe String est
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;
}
J'ai une question - pourquoi cette méthode utilise pas hashCode() ?
Autant que je sache, hashCode() permet de comparer deux chaînes de caractères rapidement.
Mise à JOUR: je sais, que deux inégale des chaînes, peut avoir le même hash. Mais l'égalité des deux chaînes de l'égalité des tables de hachage. Ainsi, en utilisant hashCode(), on peut voir immédiatement que les deux chaînes sont inégales.
Je suis tout simplement penser que l'utilisation de hashCode() peut être un bon filtre en equals
.
Mise à JOUR 2: Voici un peu de code, nous parlons ici.
C'est un exemple de méthode de Chaîne est égale à peut ressembler à
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;
}