Heim >Java >javaLernprogramm >Wie funktioniert die Methode „hashCode()' für nicht überschriebene Objekte in Java?

Wie funktioniert die Methode „hashCode()' für nicht überschriebene Objekte in Java?

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 17:08:30226Durchsuche

How Does the `hashCode()` Method Work for Non-Overridden Objects in Java?

Hash-Codes für nicht überschriebene Objekte in Java verstehen

In Java erben Objekte die Methode hashCode() von der Klasse Object. Wenn diese Methode nicht überschrieben wird, stellt sie eine Standardimplementierung zum Generieren einer eindeutigen Kennung für ein Objekt bereit.

Was ist der Standard-Hash-Code?

Wenn der hashCode() Wenn die Methode nicht überschrieben wird, folgt die HotSpot-JVM einem bestimmten Verhalten, um Hash-Codes zu generieren:

  1. Zufallszahl beim ersten Aufruf: Beim ersten Aufruf von hashCode() oder System.identityHashCode , eine Zufallszahl wird generiert und im Header des Objekts gespeichert.
  2. Nachfolgender Aufruf: Nachfolgende Aufrufe rufen diesen gespeicherten Wert ab.

JVM-Hash-Code Optionen

Das Verhalten der Standard-Hash-Code-Generierung kann mit der HotSpot-JVM-Option -XX:hashCode=n angepasst werden. Mögliche Werte sind:

  • 0: Globalen Zufallsgenerator verwenden (Standard in Java 7)
  • 5: Thread-lokalen XOR-Shift-Zufallsgenerator verwenden (Standard in Java 8)
  • 1: Objektzeiger gemischt mit Zufallswert verwenden (stabil zwischen GC-Zyklen)
  • 2: Immer 1 verwenden
  • 3: Automatisch inkrementierende Zahlen verwenden
  • 4: Verwenden Objektzeiger auf 32 Bit gekürzt

Hinweis: Selbst mit -XX:hashCode=4 zeigt der Hashcode möglicherweise nicht immer auf die genaue Objektadresse, da Objekte verschoben werden können in Erinnerung. Darüber hinaus sind Objektadressen nicht gleichmäßig verteilt, was möglicherweise zu unausgeglichenen Hash-Tabellen führt.

Daher ist es wichtig, die Methode hashCode() zu überschreiben, wenn Sie ein bestimmtes Hash-Code-Verhalten für Ihre Objekte benötigen.

Das obige ist der detaillierte Inhalt vonWie funktioniert die Methode „hashCode()' für nicht überschriebene Objekte in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn