2015-04-22 62 views
5

「NetBeans 8調試器變量」窗口具有「值」列。列的含義對於基本類型和字符串和數組非常簡單,但對於對象,列顯示一個「#」字符,後跟一個(通常爲4位數)的數字。該值顯然與對象的身份有關,因爲引用同一對象的多個變量具有相同的數字顯示,並且連續構建的對象似乎具有連續數字。該數字不是object.hashCode()。任何人都可以告訴我更多關於顯示的號碼嗎?我特別想知道這個數字是否可以作爲類似於hashCode()的對象的方法或屬性來訪問。如果沒有,那麼有沒有辦法以編程方式訪問該號碼?「NetBeans調試器變量」窗口中對象的「值」列的含義是什麼?

我對該列含義的解釋對應於標題爲「對象行」的https://ui.netbeans.org/docs/hi/debugger3.4/variables/index.html#specific的最後一部分。它指出:「對象行用於顯示對類實例的引用,每個引用可以被認爲具有一個類實例的數量(來自虛擬機中的某個實例表),所以這個數字顯示在值列中前綴爲「#」)作爲參考。「

我想獲得更好的解釋,文章簡單地稱爲「虛擬機中的一些實例表」。

感謝

回答

0

我不認爲有是訪問次數,除非你正在創建調試器插件的方式。在調試會話期間,Netbeans只會爲遇到的每個新對象分配一個新號碼。 「是新對象」檢查可能直接基於身份(==),而不是基於Object.hashCode()/System.identityHashCode()

你可以在字面上看「虛擬機中的一些實例表」。即使JVM沒有明確的表格,你仍然可以從堆轉儲(HPROF)中獲得這樣的列表。 OQL(對象查詢語言)允許類似SQL的訪問這些數據。例如:

select f.field1 from my.package.MyClass f where f.field2 = 123 

順便說我在這個問題結束了尋找一種方式來顯示toString()的而不是#number - 讓我不得不用鼠標右鍵單擊變量表頭,並選擇新列「的字符串值」。另一種方法是在「工具/選項/ Java/Java調試器/變量格式化程序」中添加可變格式化程序

相關問題