Quelle est l’implémentation par défaut de `hashCode`?

Si on ne remplace pas la méthode hashCode , quelle est l’implémentation par défaut de hashCode ?

Ensuite, cette classe hérite du hashCode d’un de ses ancêtres. Si non les remplace, alors Object.hashCode est utilisé.

De la documentation :

Dans la mesure du possible, la méthode hashCode définie par la classe Object renvoie des entiers distincts pour des objects distincts. (Ceci est généralement implémenté en convertissant l’adresse interne de l’object en un entier, mais cette technique d’implémentation n’est pas requirejse par le langage de programmation JavaTM.)

L’implémentation par défaut est donc spécifique à la JVM

Par défaut, les méthodes non remplacées sont héritées de Object .

Si vous examinez la documentation de cette méthode, les valeurs renvoyées sont des ” [...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...]) . La méthode de java.lang.Object est déclarée comme native, ce qui signifie que l’implémentation est fournie par la machine virtuelle Java et peut varier en fonction de votre environnement d’exécution.

Un petit exemple:

 Object o1 = new Object(); Object o2 = new Object(); System.out.println(o1.hashCode()); System.out.println(o2.hashCode()); 

imprime (en utilisant mon jdk6):

 1660187542 516992923 

Une représentation hexadécimale de la valeur hashCode() est utilisée dans l’implémentation par défaut de toSsortingng() par la manière suivante: Exécuter System.out.println(o1) imprime quelque chose comme

 java.lang.Object@7a5e1077 

Object.hashcode () est une méthode native.

public native int hashCode();

Cela signifie qu’il est implémenté dans un code spécifique à la plateforme et qu’il est exposé en tant que méthode native.

le code pour le même sera un code compilé et non disponible avec JDK

cette question existante pourrait fournir plus d’informations.