Es wird oft behauptet, dass die Implementierung von Object.hashCode()
(die Standardimplementierung für alle Objekte) die Speicheradresse des Objekts angibt. Dieser Anspruch wird oft einer Erklärung der besonderen Ausgabe von Object.to String() beigefügt.Gibt Object.toString oder Object.hashCode jemals die Speicheradresse des Objekts
Siehe here für ein Beispiel.
Dies ist sicherlich nicht der Fall für alle JVMs/JREs, denen ich bewusst bin. Nicht zuletzt, weil Adressen jetzt meist 64 Bit lang sind. Aber auch Müllsammler verlagern Objekte, so dass sich die Adresse ändert. Ich habe gesehen, Ansprüche können es die ersten Speicheradresse des Objekts sein. Aber da viele Objekte dann ähnliche Adressen hätten, wäre das eine schlechte Wahl für einen Hash-Code.
Gibt es jemals JVMs/JREs, für die es die (ursprüngliche) Speicheradresse des Objekts war, oder waren es jemals solche?
Ich bin mir bewusst, dass der JavaDoc für die Object
Klasse schlägt vor, dass die hashCode
für eine Implementierung möglicherweise die Speicheradresse sein. Aber ich vermute, dass dies eine völlig veraltete Aussage ist, die nie aktualisiert wurde.
Tatsächlich ist die aktuelle Oracle JVM verwendet nicht die Speicheradresse (aber kann so konfiguriert werden, dies zu tun):
https://stackoverflow.com/a/16105878/545127
Die Idee, dass der HashCode eine Speicheradresse ist, ist ein historischer Artefakt:
https://stackoverflow.com/a/13860488/545127
Meine Frage ist, ob (und welche) jeder weit verbreitet JVM Implemen verwendet, um die Speicheradresse als (Standard) tion.
In HotSpot ist konfigurierbar: https://stackoverflow.com/questions/16105420/java-object-hashcode-address-or-random/16105878 # 16105878 – Boann
Vermutlich wurde die Sun JVM zu der Zeit, als der Javadoc geändert wurde, diesen Satz enthalten? (Wollen Sie fragen, ob es * aktuelle * JVMs gibt, die das tun?) – meriton
Siehe auch http://StackOverflow.com/questions/13860194/what-is-an-internal-address-in-java – Raedwald