首頁  >  文章  >  Java  >  當「hashCode()」方法未被重寫時,它在 Java 中的行為如何?

當「hashCode()」方法未被重寫時,它在 Java 中的行為如何?

Barbara Streisand
Barbara Streisand原創
2024-11-03 00:36:02818瀏覽

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

Java 中的物件雜湊程式碼預設行為

如果Java 物件中未明確重寫hashCode() 方法,則呼叫hashCode ()根據Java 虛擬機器(JVM) 的實現,該物件會產生特定結果。

HotSpot JVM 預設行為

在HotSpot JVM 中,預設行為如下:

  • 第一次呼叫:
  • 第一次呼叫:產生一個隨機數並儲存在物件頭中。
後續呼叫:

從物件標頭中擷取隨機數。

預設情況下,此隨機數與物件的內容或位置沒有關聯。

可自訂行為

  • hashCode() 方法的行為可以使用 -XX:hashCode=n HotSpot JVM 選項進行自訂。此選項採用以下值:
  • 0:全域隨機產生器(Java 7 中預設)
  • 5:執行緒本地異或移位隨機產生器(Java 8 中預設)
  • 1:與隨機值混合的物件指標(在停止世界事件之間穩定)
  • 2:總是1
  • 3:自動遞增數字

4:物件指標修剪為32 位元

    特殊注意事項
  • 即使使用-XX:hashCode=4,雜湊碼也可能並不總是指向到對像地址。物件創建後可以移動,但雜湊碼保持不變。
物件位址可能分佈不均,使用 -XX:hashCode=4 選項時會導致雜湊表不平衡。

以上是當「hashCode()」方法未被重寫時,它在 Java 中的行為如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn