首頁  >  文章  >  Java  >  當 Java 物件的 `hashCode()` 未被重寫時會發生什麼?

當 Java 物件的 `hashCode()` 未被重寫時會發生什麼?

Barbara Streisand
Barbara Streisand原創
2024-11-02 01:38:02504瀏覽

What Happens to Java Object's `hashCode()` When It's Not Overridden?

了解Java 中的雜湊程式碼:未重寫時的預設行為

在Java 中,hashCode() 方法在決定物件的唯一識別碼方面起著至關重要的作用。作為一種固有方法,其行為可能會有所不同,這取決於它是否被物件的類別覆蓋。讓我們來探索一下在不受影響的情況下 hashCode() 的預設實作。

物件的預設雜湊程式碼產生

如果沒有重寫hashCode() 方法,HotSpot JVM(廣泛使用的Java)採用一種機制來產生隨機數並將其儲存在對象的標頭中。在隨後呼叫 hashCode() 時,將簡單地檢索該隨機數。此行為旨在為物件提供不可預測且唯一的標識符,與其內容或位置沒有任何關聯。

雜湊程式碼的HotSpot JVM 配置

可以控制雜湊程式碼的產生策略透過-XX:hashCode=n HotSpot JVM 選項:

  • 0(Java 7 中的預設值): 使用全域隨機產生器,容易出現競爭條件和爭用。
  • 5(Java 8 中的預設值): 使用執行緒本地異或移位隨機產生器,消除先前的問題。
  • 1: 混合物件指標具有隨機值,提供 stop-the-world 事件之間的穩定性(用於測試/除錯)。
  • 2: 總是傳回 1(用於測試/偵錯)。
  • 3: 使用自動遞增數字(用於測試/調試,可能存在爭用)。
  • 4: 使用修剪後的物件指標(用於測試/除錯)。

需要注意的是,由於可能的物件重定位,即使使用 -XX:hashCode=4 產生的雜湊碼也可能無法直接反映物件的記憶體位址。另外,如果物件位址分佈不好,可能會出現不平衡的雜湊表。

以上是當 Java 物件的 `hashCode()` 未被重寫時會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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