Si l'on ne substitue pas la méthode hashCode
, quelle est l'implémentation par défaut de hashCode
?
Ensuite, cette classe hérite de hashCode
de l'un de ses ancêtres. Si aucune d'entre elles ne la remplace, alors Object.hashCode est utilisé.
De la docs :
Dans la mesure du possible, la méthode hashCode définie par la classe Object renvoie des entiers distincts pour des objets distincts. (Ceci 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.)
Donc, l'implémentation par défaut est spécifique à la machine virtuelle Java
Par défaut, les méthodes non remplacées sont héritées de Object
.
Si vous consultez la documentation de cette méthode, les valeurs de retour sont "[...] distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer [...])
". La méthode dans Java.lang.Object
Est déclarée comme native, ce qui signifie que l'implémentation est fournie par la JVM 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());
impressions (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 toString()
au fait: Running System.out.println(o1)
affiche 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 du code spécifique à la plate-forme et exposé en tant que méthode native.
le code pour la même chose sera un code compilé et non disponible avec JDK
this question existante pourrait fournir plus d’informations.