經常聲稱Object.hashCode()
(所有對象的默認實現)的實現給出了對象的內存地址。這種說法通常附在對由Object.to String()產生的特殊輸出的解釋上。Object.toString或Object.hashCode是否提供了對象的內存地址
查看here爲例。
這當然是不是我知道任何JVM/JRE的情況。尤其是因爲現在地址通常是64位。但是,垃圾收集器也會重新定位對象,所以地址會發生變化。我見過聲稱它可以是的初始內存地址。但是,隨着許多對象將具有相似的地址,那麼對於散列碼來說這將是一個糟糕的選擇。
是否存在或曾經存在任何廣泛使用的JVM/JRE,它們是對象的(初始)內存地址。
我知道,Object
類的JavaDoc表明實現的hashCode
可能是內存地址。但我懷疑這是一個從未更新過的嚴重過時陳述。
事實上,當前的Oracle JVM不使用的內存地址(但可以被配置爲這樣做):
https://stackoverflow.com/a/16105878/545127
有觀點認爲,哈希碼是內存地址是一個歷史的假象:
https://stackoverflow.com/a/13860488/545127
我的問題是任何廣泛使用JVM是否(和)使用的內存地址爲(默認)implementa灰。
在熱點它是可配置:https://stackoverflow.com/questions/16105420/java-object-hashcode-address-or-random/16105878#16105878 – Boann
推測當時jvadoc被修改爲包含該句子的Sun JVM? (你的意思是問是否有任何*當前* JVMs這樣做?) – meriton
參見http://stackoverflow.com/questions/13860194/what-is-an-internal-address-in-java – Raedwald