Je suis en train de chercher à comprendre l'implémentation native de la méthode hashCode()
. Que retourne exactement cette méthode? Est-ce une adresse mémoire ou une valeur aléatoire?
Réponses
Trop de publicités?.hashCode()
implémentation native dépend de la JVM.
Par exemple, HotSpot a 6 implémentations de Object.hashCode()
. Vous pouvez le choisir en utilisant le drapeau -XX:hashCode=n
en exécutant la JVM via la ligne de commande, où n :
0 - Park-Miller RNG (par défaut)
1 - f(address, global_statement)
2 - constante 1
3 - Compteur série
4 - Adresse d'objet
5 - Xorshift Thread-local
De la documentation:
Dans la mesure du possible, la méthode hashCode définie par la classe Object renvoie des entiers distincts pour des objets distincts. (Cela est généralement implémenté en convertissant l'adresse interne de l'objet en entier, mais cette technique d'implémentation n'est pas requise par le langage de programmation JavaTM.)
Il se peut donc qu'il soit lié à une adresse mémoire, mais ce n'est pas obligatoire - et vous ne devez surtout pas supposer qu'il est lié à la mémoire en aucune façon.
Rien de ce que vous faites avec un code de hachage ne devrait se soucier de cela. Les seules choses que vous devriez déduire des codes de hachage sont:
- Si les codes de hachage de deux objets sont les mêmes, ils peuvent être des objets égaux
- Si les codes de hachage de deux objets sont différents, ce ne sont pas des objets égaux (en supposant une implémentation correcte, qu'elle soit redéfinie ou non)
Votre réponse se trouve ici. Comme mentionné dans la documentation :
Autant que possible, la méthode hashCode définie par la classe Object retourne des entiers distincts pour des objets distincts. (Cela est généralement implémenté en convertissant l'adresse interne de l'objet en un entier, mais cette technique d'implémentation n'est pas requise par le langage de programmation JavaTM).