gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:50 25 4
gpt4 key购买 nike

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

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

我正在尝试更好地解释文章中所谓的“虚拟机中的一些实例表”。

谢谢

最佳答案

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

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

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

顺便说一句,我最终在这个问题上寻找一种方法来显示 toString() 而不是那个 #number - 为了得到它我必须右键单击可变表头并选择新列“字符串值”。另一种方法是在“Tools/Option/Java/Java Debugger/Variable formatters”中添加 Variable formatter

关于java - NetBeans 调试器变量窗口中对象的值列的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com