Heim >Java >javaLernprogramm >Wie verhält sich die Methode „hashCode()' in Java, wenn sie nicht überschrieben wird?

Wie verhält sich die Methode „hashCode()' in Java, wenn sie nicht überschrieben wird?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 00:36:02886Durchsuche

How does the `hashCode()` method behave in Java when it's not overridden?

Standardverhalten des Objekt-Hash-Codes in Java

Wenn die hashCode()-Methode in einem Java-Objekt nicht explizit überschrieben wird, wird beim Aufrufen von hashCode() für dieses Objekt liefert ein spezifisches Ergebnis basierend auf der Implementierung der Java Virtual Machine (JVM).

Standardverhalten der HotSpot-JVM

In der HotSpot-JVM das Standardverhalten lautet wie folgt:

  • Erster Aufruf: Eine Zufallszahl wird generiert und im Objektheader gespeichert.
  • Nachfolgende Aufrufe: Die Eine Zufallszahl wird aus dem Objekt-Header extrahiert.

Standardmäßig hat diese Zufallszahl keine Korrelation mit dem Inhalt oder der Position des Objekts.

Anpassbares Verhalten

Das Verhalten der hashCode()-Methode kann mit der HotSpot-JVM-Option -XX:hashCode=n angepasst werden. Diese Option nimmt die folgenden Werte an:

  • 0: Globaler Zufallsgenerator (Standard in Java 7)
  • 5: Thread-lokaler XOR-Shift-Zufallsgenerator (Standard in Java 8)
  • 1: Objektzeiger gemischt mit einem Zufallswert (stabil zwischen Stop-the-World-Ereignissen)
  • 2: Immer 1
  • 3: Automatisch inkrementierende Zahlen
  • 4: Objektzeiger auf 32 Bit gekürzt

Besondere Überlegungen

  • Selbst mit -XX:hashCode=4 zeigt der Hash-Code möglicherweise nicht immer an die Objektadresse. Objekte können nach der Erstellung verschoben werden, der Hash-Code bleibt jedoch unverändert.
  • Objektadressen sind möglicherweise schlecht verteilt, was bei Verwendung der Option -XX:hashCode=4 zu unausgeglichenen Hash-Tabellen führt.

Das obige ist der detaillierte Inhalt vonWie verhält sich die Methode „hashCode()' in Java, wenn sie nicht überschrieben wird?. 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