回答
爲了讓參考對象作爲一個數字,你可以在支持它的JVM使用不安全。你可以將參考在陣列中並用Unsafe.getInt()爲32位的引用(注意:大多數64位JVM將使用32位的參考文獻)訪問它或Unsafe.getLong()這將訪問作爲參考一個數字,但是如果GC發生並且對象被移動,只要你得到它就可以改變它。
另一個複雜之處在於CompressedOops意味着索引的對象可以被翻譯許多不同的方式。爲了簡單起見,我建議使用4GB到26GB的堆。對於這些尺寸,您將地址移動<< 3
以獲取地址。
BTW您可以使用Unsafe.putInt(x,1,hashCode)來覆蓋系統hashCode。 ;)
我不相信你可以獲取Java中某個對象的實際內存位置(用於打印目的或其他方式)。即使你做System.out.println(new Object())
,你看到的不是的「引用」位置,它是一個包含對象散列碼的字符串。
顯然你可以看到[Peter Lawrey的回覆](http://stackoverflow.com/questions/8820164/is-there-a-way-to-get-a-reference-address)。 –
@SteveP .:你不能使用* defined * Java。您可以在Oracle的JVM **上**使用無證內部。所以不是(作爲對該答案的評論提及)J9,JRockit,Dalvik等 –
嘿,錯過了。 –
這會在Integer類中輸出「toString」方法的重載版本。 一般來說,如果一個類沒有重載該方法,它將輸出classname + hashcode。像這樣的東西(你必須手動完成):
integerA.getClass().getName() + "@" + integerA.hashCode()
它打印類名和散列碼,而不是「引用」。 –
默認實現(如果不是被覆蓋)將打印的物體,就像這樣
Integer i = 95;
System.out.println(i.getClass().getName() + "@" + Integer.toHexString(i.hashCode()));
//[email protected]
萬一整數時, hashCode
的價值與底層價值相同。
各種類別的默認toString
方法涉及hashCode
方法的結果。也許你正在尋找那個,因爲它是我能想到的「打印參考」最接近的。
人們一直在回答約hashCode()
,但hashCode()
爲Integer
是Integer
的值,它與它在內存中的位置無關。另外,一般而言,僅僅因爲兩個Objects
具有相同的hashCode()
而不是而不是意味着它們引用相同的Object
。
EDIT(在響應評論):
即使你使用IdentityHashCode(),它給出了hashCode()
非overrided版本,你仍然不會得到一個內存地址。
@CodeEnthusiastic我刪除它。 –
那麼,如何獲得Integer的內存地址? – JasonHuang
你可以得到顯示參考最接近的是,因爲它會通過對象來計算哈希碼,System.IdentityHashCode()。 Integer當然會覆蓋hashCode,所以Integer自己的hashCode()方法肯定與其引用無關。
事實上,並不保證System.IdentityHashCode與引用有任何關係 - 它只是一個數字,當爲同一個對象計算時總是相同的,也就是說,儘可能地,對於不同的對象不同。
- 1. 打印對象的引用
- 2. 爲什麼可以在Java中正確打印Integer對象?
- 3. 打印索引對象
- 4. JNI如何訪問Java對象(Integer)
- 5. 如何從java中的對象數組中打印對象?
- 6. Java打印對象,封裝
- 7. 用javascript打印對象與我們用Java打印對象的方式相似
- 8. 如何打印對象ID?
- 9. 如何打印javascript對象?
- 10. 如何打印對象html
- 11. 如何使用java打印對象名稱的類的屬性?
- 12. 在Java中打印對象的名稱
- 13. Java - 打印一個對象的內容
- 14. 打印對象
- 15. 如何打印JSTL中的數組對象的索引
- 16. Jersey:如何打印嵌套對象爲JSON的通用對象?
- 17. 如何打印對象的單個值?
- 18. 如何打印對象的鍵和值?
- 19. 如何打印對象的實現類
- 20. 如何打印MyList的對象?
- 21. 如何打印SimpleXmlElement對象的值
- 22. 如何打印對象(stdClass的)
- 23. 如何「反引用」 Java中的對象
- 24. Integer類對象
- 25. 如何打印出一個數組中的對象(Java)
- 26. 如何打印對象數組中的JAVA
- 27. 如何打印預定義的java對象?
- 28. 如何在java中打印嵌套在數組中的對象
- 29. Java對對象的引用
- 30. 將Java對象打印到Javascript文件
我有一種強烈的感覺,這是[XY-Problem](http://mywiki.wooledge.org/XyProblem)的一種情況。你爲什麼需要這個?你想做什麼? –
熱情,查看我的編輯。 –