NetBeans调试器变量窗口中对象的Value列的含义是什么?

时间:2015-04-22 07:08:27

标签: java debugging netbeans

NetBeans 8调试器变量窗口具有“值”列。对于基本类型和字符串和数组,列的含义非常自我解释,但对于对象,该列显示“#”字符后跟(通常为4位)数字。该值显然与对象的标识相关,因为引用同一对象的多个变量显示相同的数字,并且连续构造的对象似乎具有顺序编号。该数字不是object.hashCode()。谁能告诉我更多有关正在播出的电话号码的信息?我特别想知道这个数字是否可以作为对象的方法或属性来访问,类似于hashCode()。如果没有,那么有没有办法以编程方式访问该号码?

我对列的含义的解释对应于https://ui.netbeans.org/docs/hi/debugger3.4/variables/index.html#specific的最后一节,标题为“对象行”。它声明“对象行用于显示对类实例的引用。每个引用可以被认为具有类实例的数量(来自VM中的某个实例表),因此该数字显示在值列中(前缀为“#”)作为参考。“

我试图更好地解释文章简单地称之为“虚拟机中的某些实例表”。

由于

1 个答案:

答案 0 :(得分:0)

除非您正在创建调试器插件,否则我认为没有办法访问该号码。 Netbeans只是为调试会话期间遇到的每个新对象分配一个新数字。 "是新对象"检查可能直接基于身份(==),而不是Object.hashCode() / System.identityHashCode()

您可以在VM中使用"某些实例表"毫不夸张的说。即使JVM没有显式表,您仍然可以从堆转储(HPROF)获取此类列表。 OQL(对象查询语言)允许类似SQL的访问此类数据。例如:

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

顺便说一下,我最后在这个问题中寻找显示toString()而不是#number的方法 - 为了得到我必须右键单击变量表标题并选择新列&# 34;字符串值"。另一种方法是在"工具/选项/ Java / Java调试器/变量格式化器中添加变量格式化器"