首頁  >  文章  >  Java  >  「hashCode()」方法如何適用於 Java 中的非重寫物件?

「hashCode()」方法如何適用於 Java 中的非重寫物件?

Barbara Streisand
Barbara Streisand原創
2024-10-31 17:08:30139瀏覽

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

了解 Java 中非重寫物件的雜湊程式碼

在 Java 中,物件從 Object 類別繼承 hashCode() 方法。如果不重寫此方法,它將提供用於生成物件的唯一標識符的預設實作。

預設雜湊程式碼是什麼?

當hashCode()方法未被覆蓋,HotSpot JVM 遵循特定行為來產生雜湊程式碼:

  1. 首次呼叫時的隨機數: 首次呼叫hashCode() 或System.identityHashCode ,產生一個隨機數並將其儲存在物件的標頭中。
  2. 後續呼叫:後續呼叫會擷取此儲存的值。

JVM 雜湊程式碼選項

可以使用 -XX:hashCode=n HotSpot JVM 選項自訂預設雜湊程式碼產生的行為。可能的值包括:

  • 0:使用全域隨機產生器(Java 7 中預設)
  • 5:使用執行緒本地異或移位隨機產生器(Java 8 中預設)
  • 1:使用物件指標與隨機值混合(GC 週期之間穩定)
  • 2:一律使用1
  • 3:使用自動遞增數字
  • 4:使用物件指標修剪為32 位元

注意: 即使使用-XX:hashCode=4,雜湊碼也可能不會總是指向確切的物件位址,因為物件可以移動記憶中。此外,物件位址分佈不均勻,可能會導致雜湊表不平衡。

因此,如果您需要物件的特定雜湊程式碼行為,請務必考慮重寫 hashCode() 方法。

以上是「hashCode()」方法如何適用於 Java 中的非重寫物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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