Comment la méthode equals() fonctionne
Je suis à fouiller dans les bases de Java.
Je déduis de ce l'article, que java méthode equals signifie que, si deux objets sont égaux, alors ils doivent avoir le même hashCode().
Voici mon exemple.
public class Equals {
/**
* @param args
*/
public static void main(String[] args) {
String a = new String("a");
String b = new String("a");
System.out.println("a.hashCode() "+a.hashCode());
System.out.println("b.hashCode() "+b.hashCode());
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
de sortie:
un.hashCode() 97
b.hashCode() 97
faux
vrai
Réelle langage Java méthode equals
public boolean equals(Object obj) {
return (this == obj);
}
Dans mon exemple ci-dessus, un.equals(b) a renvoyé true, ce qui signifie la condition a==b est satisfaite. Mais alors, pourquoi a==b est de retour faux dans cet exemple?
Ne sont pas hashCode et adresse de l'un et de même?
Aussi, est hashCode contre, lorsque nous disons a==b ou autre chose?
Ne vous laissez pas distraire par le code de hachage. Ce n'est pas le facteur déterminant de l'égalité. Demandez-vous, combien de codes de hachage peut-il y avoir si la resut est un entier? Maintenant, combien de chaînes de caractères peuvent y être?
Hashcode != Adresse. Hashcode valeur est couramment utilisé comme un index dans une table de hachage, mais il est souvent substituée à produire de meilleurs de hachage.
Hashcode != Adresse. Hashcode valeur est couramment utilisé comme un index dans une table de hachage, mais il est souvent substituée à produire de meilleurs de hachage.
OriginalL'auteur srk | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
String
classe a écrasé laequals()
méthode . Veuillez suivre les String#equals() de la documentation.un.equals(b) a renvoyé true, ce qui signifie la condition a==b est satisfaite
C'est le défaut de mise en œuvre de
equals()
dans leObject
classe ,String
classe a annulé le défaut de mise en œuvre. Elle renvoie true si et seulement si l'argument n'est pas nulle et est un objet de type String qui représente la même séquence de caractères que cet objet.Ne sont pas hashCode et adresse de l'un et de même?
Pas nécessairement , pour plus de lecture sur hashCode().
OriginalL'auteur NINCOMPOOP
Non, Hashcode et l'adresse ne sont pas les mêmes.
Car a==b n'est pas de comparer hashcodes.
Oui, autre chose est, comparativement, lorsque nous disons a==b.
(ce n'est pas les adresses, vraiment, mais c'est assez proche).
Aussi, juste parce que "l'égalité des objets sont égaux hashcodes" ne signifie pas "l'égalité des hashcodes signifie l'égalité des objets".
OriginalL'auteur CPerkins
La
==
opérateur en Java compare les références de l'objet pour voir s'ils font référence au même objet. Parce que vos variablesa
etb
se référer à des objets différents, ils ne sont pas égaux selon==
.Et la
hashCode
méthode ne retourne pas l'adresse dansString
, parce que la classe a remplacéehashCode
.En outre, la
equals
méthode a été appliquée enString
pour comparer le contenu des cordes; c'est pourquoia.equals(b)
retournetrue
ici.OriginalL'auteur rgettman
un.est égal à(b) est différent de a==b.
un.equals(b) vérifie si deux objets sont égaux basé sur equals() de la mise en œuvre.
a==b vérifie si deux objets ont la même référence.
Si a==b est vrai, alors une.equals(b) doit être vrai parce qu'ils font référence au même objet, mais pas vice-versa.
OriginalL'auteur IndoKnight
Classe String remplace la valeur par défaut de mise en œuvre de la equals() méthode de la classe Object. La méthode equals de code que vous avez fourni n'est pas de la classe String, mais à partir de la classe de l'Objet, qui est remplacée par la Chaîne implémentation de la classe qui vérifie si le contenu de ces deux objets sont les mêmes ou pas.
OriginalL'auteur Ankur Shanbhag
Hashcode un objet est destiné à être remplacé.
Pour la classe String la formule utilisée est la suivante:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Je vous encourage à rechercher pourquoi le 31 a été utilisé comme un multiplicateur et pas un autre nombre.
Général de pouce à la règle pour remplacer le code de hachage est que pour les différents objets de code de hachage doit être différent aussi loin que possible.
Pour y parvenir, il est souhaitable que vous prenez en compte tous les important champ d'un objet lors du calcul de la valeur de hachage.
Note: Juste une autre nourriture pour la pensée (source : Efficace Java):
Considérons la suite de la mise en œuvre de hashcode
La validité de la mise en œuvre, mais c'est aussi la pire possible. Lire pourquoi.
int hashcode(){ return 75; }
?C'est aussi mauvais, sinon pire. Retour de la valeur à chaque fois défait le but de code de hachage.
OriginalL'auteur prashant
A et B sont deux objets différents qui génèrent le même code de hachage en raison de
String
's la mise en œuvre dehashCode()
.==
vérifie juste pour voir si les côtés gauche et droit de partager la même référence. Il n'appelle pas uneObject
'sequals()
méthode.Alors, non, les hachages et les références de l'objet sont pas la même chose.
OriginalL'auteur dcow