2015-04-22 28 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调试器/变量格式化程序”中添加可变格式化程序

相关问题