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

Dav*_*vid 6 java debugging netbeans

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

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

我试图更好地解释文章简称为"虚拟机中的某些实例表".

谢谢

use*_*037 1

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

您可以从字面上理解“虚拟机中的某些实例表”。即使 JVM 没有显式表,您仍然可以从堆转储 (HPROF) 中获取此类列表。OQL(对象查询语言)允许对此类数据进行类似 SQL 的访问。例如:

select f.field1 from my.package.MyClass f where f.field2 = 123
Run Code Online (Sandbox Code Playgroud)

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