Le hashCode() de l'objet renvoie l'adresse mémoire par défaut, mais hashCode() peut être réécrit, donc hashCode() ne peut pas représenter différentes adresses mémoire
La méthode System.identityHashCode(Object) peut renvoyer l'adresse mémoire de l'objet, que la classe de l'objet remplace ou non la méthode hashCode()
La méthode toString de la classe Java Object imprime l'adresse de la variable de référence par défaut. Si elle n'imprime pas l'adresse, alors toString a été remplacé dans la sous-classe. Vous pouvez essayer de remplacer toString
Lisez attentivement l'API JDK Le protocole général de hashCode est :
Lors de l'exécution d'une application Java, la méthode hashCode doit systématiquement renvoyer le même entier lorsqu'elle est appelée plusieurs fois sur le même objet, à condition que les informations utilisées pour égaliser les objets ne soient pas modifiées. Cet entier n'a pas besoin d'être cohérent d'une exécution d'une application à une autre exécution de la même application.
Si deux objets sont égaux selon la méthode equals(Object), alors l'appel de la méthode hashCode sur chacun des deux objets doit produire le même résultat entier.
Si deux objets ne sont pas égaux selon la méthode equals(java.lang.Object), alors l'appel de la méthode hashCode sur l'un ou l'autre objet n'est pas nécessaire pour produire des résultats entiers différents. Cependant, les programmeurs doivent être conscients que la génération de résultats entiers différents pour des objets inégaux peut améliorer les performances des tables de hachage. En fait, la méthode hashCode définie par la classe Object renvoie différents entiers pour différents objets. (Cela se fait généralement en convertissant l'adresse interne de l'objet en nombre entier, mais le langage de programmation JavaTM ne nécessite pas cette technique d'implémentation.)
Je me souviens que ce n’est pas autorisé. Quelle est la raison pour laquelle vous imprimez l’adresse mémoire ?
Hashcode ne signifie pas nécessairement que les adresses mémoire sont différentes. Différentes JVM ont des implémentations différentes.
Le hashCode() de l'objet renvoie l'adresse mémoire par défaut, mais hashCode() peut être réécrit, donc hashCode() ne peut pas représenter différentes adresses mémoire
La méthode System.identityHashCode(Object) peut renvoyer l'adresse mémoire de l'objet, que la classe de l'objet remplace ou non la méthode hashCode()
La méthode toString de la classe Java Object imprime l'adresse de la variable de référence par défaut. Si elle n'imprime pas l'adresse, alors toString a été remplacé dans la sous-classe. Vous pouvez essayer de remplacer toString
.Lisez attentivement l'API JDK
Le protocole général de hashCode est :
Lors de l'exécution d'une application Java, la méthode hashCode doit systématiquement renvoyer le même entier lorsqu'elle est appelée plusieurs fois sur le même objet, à condition que les informations utilisées pour égaliser les objets ne soient pas modifiées. Cet entier n'a pas besoin d'être cohérent d'une exécution d'une application à une autre exécution de la même application.
Si deux objets sont égaux selon la méthode equals(Object), alors l'appel de la méthode hashCode sur chacun des deux objets doit produire le même résultat entier.
Si deux objets ne sont pas égaux selon la méthode equals(java.lang.Object), alors l'appel de la méthode hashCode sur l'un ou l'autre objet n'est pas nécessaire pour produire des résultats entiers différents. Cependant, les programmeurs doivent être conscients que la génération de résultats entiers différents pour des objets inégaux peut améliorer les performances des tables de hachage.
En fait, la méthode hashCode définie par la classe Object renvoie différents entiers pour différents objets. (Cela se fait généralement en convertissant l'adresse interne de l'objet en nombre entier, mais le langage de programmation JavaTM ne nécessite pas cette technique d'implémentation.)