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中文網其他相關文章!