différence entre equals() et hashCode()
Je veux une brève définition de la equals() , "==" et hashCode(). Si je exécutez le code suivant signifie que la sortie sera "vrai faux 2420395 2420395". Mais j'ai dû comprendre que la méthode equals() compare la chaîne et "==" compare la référence. Mais à la sortie de la hashCcode() la méthode imprime le numéro de référence pour les chaînes que même alors, pourquoi le "==" retourne "false".
String str = "Name";
String str1 = new String("Name");
if(str.equals(str1))
System.out.println("true");
else
System.out.println("false");
if(str==str1)
System.out.println("true");
else
System.out.println("false");
System.out.println(str.hashCode());
System.out.println(str1.hashCode());
}
Je vous suggère de lire la définition de hashCode() de nouveau. Il n'y a pas une telle chose comme un numéro de référence.
OriginalL'auteur Dhivakar | 2014-06-27
Vous devez vous connecter pour publier un commentaire.
La equals() et hashCode() méthodes s'avérer très important, lorsque les objets de mise en œuvre de ces deux méthodes sont ajoutées aux collections. Si elles sont appliquées correctement, il peut vissé vers le haut de votre vie.
equals() : Cette méthode vérifie si un autre objet passé en argument est égal à l'objet dans lequel cette méthode est invoquée. Il est facile à mettre en œuvre la méthode equals() de manière incorrecte, si vous ne comprenez pas le contrat. Avant de remplacer cette méthode, à la suite de “propriétés” de la nécessité de garder à l'esprit -
De code source java
}
hashCode(): Cette méthode retourne un hashCode() comme valeur un Entier et est pris en charge pour le bénéfice de hachage basée sur java.util.Les classes de Collection comme la table de hachage, HashMap, HashSet, etc. Si une classe remplace la méthode equals (), il doit mettre en œuvre le hashCode() de la méthode.Avant de remplacer cette méthode, vous devez garder à l'esprit
Si deux objets sont égaux selon la méthode equals (), puis en appelant la hashCode() dans chacun des deux objets doivent retourner le même résultat sous forme d'entier. Donc, Si un champ n'est pas utilisé dans equals(), alors il ne doit pas être utilisé dans hashCode() de la méthode.
Si deux objets sont inégales selon la méthode equals (), chacun des deux objets peut retourner les deux résultats en entiers ou même entier de résultats (c'est à dire si 2 objets ont le même hashCode() le résultat ne signifie pas qu'ils sont égaux, mais si deux objets sont égaux, alors ils doivent retourner le même hashCode() le résultat).
Comme par le code source de java
Autant qu'il est raisonnablement pratique, le hashCode de la méthode définie par java.lang.L'objet n'retour distincts entiers pour des objets distincts. (Ce qui est généralement mis en œuvre par la conversion de l'adresse interne de l'objet en entier)
"Je comprends que le hashcode et adresse de mémoire sont les deux choses différentes," --- c'est vrai. enfait ça dépend de la JVM est mis en œuvre. Mais si vous consultez le code source java/javadoc vous apprendrez à connaître à ce sujet.
"la façon dont les codes de hachage peut être la même pour les différents objets et ceux qui ne sont pas" égaux " -- ne peut pas être. si deux objets ne sont pas égaux de leurs hashcode devrait également être différent
OriginalL'auteur dgm
hashCode()
ne retourne pas la référence d'un objet, mais une table de hachage de l'objet, calculée en quelque sorte.==
ne pas comparer des objets à l'aide de la valeur dehashCode()
mais, comme vous le dites correctement, par la valeur de l'objet de référence.OriginalL'auteur Martin Dinov
Vous pouvez lire les hashCode de la documentation. En quelques mots, elle dit que si
(obj1.equals(obj2)
est vrai puisobj1.hashCode()==obj2.hasCode()
doit être vrai être un valide la mise en œuvre.Noter que cela ne signifie pas que les deux objets différents ne peuvent pas partager le même code de hachage. En fait, cet exemple n'est pas valide (mais c'est affreux) la mise en œuvre de la méthode:
OriginalL'auteur Pablo Lozano
.equals()
compare le contenu réel de la chaîne.Le "==" opérateur compare si les deux objets sont de la même référence dans la mémoire. Si vous le faites
str = str1;
, puis le double égal à l'opérateur serait de retourtrue
parce qu'ils pointent vers la même référence dans la mémoire.hashCode()
retourne la valeur de hachage de l'objet de manière arbitraire. La valeur retournée sera toujours unique tant que la méthode n'est pas surchargé d'une certaine façon. Si.equals()
renvoie la valeur true, le code de hachage doit être le même.OriginalL'auteur ctzdev
equals() qu'à comparer la chaîne, c'est de ne pas vérifier la référence de la chaîne
mais '==' cocher de référence et de données à la fois
dans le 1er cas String str = "Nom"; un seul objet est créé, mais dans
2e cas de Deux objets est créé
puis de référence ne sont pas les mêmes des deux chaîne qui signifie qu'il renvoie false
OriginalL'auteur Amit Yadav
equals()
est utilisé pendant que vous essayez de trouver un objet dans une liste et.hashCode()
est utilisé dans certains de table de hachage de classes fournies par JAVA bibliothèque de classe.OriginalL'auteur Rad
equals() et hashCode() sont des méthodes différentes et hashCode de la méthode ne devrait pas être utilisée pour vérifier si l'objet de deux références sont les mêmes.
Raison: hashCode retourne juste valeur int pour un Objet, même deux objets différents peuvent avoir le même hashCode entier. La valeur retournée par hashCode() est le code de hachage de l'objet, qui est l'objet de la mémoire d'adresse en hexadécimal.
equals() vérifie si l'objet de deux références sont les mêmes. Si deux objets sont égaux, alors leur hashCode doit être le même, mais l'inverse n'est pas vrai.
OriginalL'auteur 0coder