2013-01-25 41 views

回答

10

它在本地代碼執行。至於實現,這有點棘手 - 你可以改變默認實現。如果您查看「Open JDK」來源,您將看到以下選項:

-XX:hashCode = n(從0到5)。

  • 0 - 園 - 米勒RNG(默認)
  • 1 - 常量1
  • 3 - - sequenatial計數器
  • 4 - 地址和一些全局狀態
  • 2的功能的地址物體
  • 5線程特定的異或移動

你可以在這裏找到詳細的說明:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/tip/src/share/vm/runtime/synchronizer.cpp

考慮源代碼和static inline intptr_t get_next_hash()函數的註釋。

+0

很高興知道...不知道你是否可以自定義這一點。 – ManojGumber

+0

這在我看來是實際的答案! – TechSpellBound

7

native關鍵字指示它已在本機代碼(JVM)得到執行。

+0

謝謝,但如何和誰得到這個哈希碼值,它是如何返回?請稍微洞察一下! –

+3

這將涉及查看JVM本身的代碼並知道方法的JNI(Java本地接口)實現如何綁定到它們的Java定義。 我相信JVM實現中的實際值並不一致。如果您需要依賴實際值,請覆蓋該方法以符合您的需求。 – akaIDIOT

+0

+1。我不認爲有關哈希碼的實際值和其計算方式的規範。 (但是,當然,它需要與其他hashCode一樣在內部保持一致)。 – Thilo

5

如果你看到declarationhashcode

public native int hashCode(); 

在聲明native表明,它是在JVM代碼本身來實現。

0

在哪裏實現部分?

它是由已經框架內執行。 Please see the documentation.

如果沒有實現方法,hashCode()方法如何返回結果?

但是,如果您創建自定義類型,則需要負責生成int值,該值可以很好地表示對象的當前狀態。 Here is a good example of that.

相關問題