在Eclipse中调试时,对象值附近会显示一个对象ID。
例如:28332 是 session 对象的 ID。另一个示例:waiting for: (id=101)
显示在 Debug 面板中。这些 ID 既不是哈希码也不是 System.identityHashCode
。
有人知道 - 如何获取对象的 this
id?
最佳答案
我想他们内部有一个 IdentityHashMap<Object, Integer>
,为每个对象分配一个唯一的(但在其他方面没有意义的)整数。这应该在 Eclipse 调试器内部(不是对象具有的特殊 id)。你是问怎么搞定的?
编辑:我会像这样设置断点(注意我不熟悉 Eclipse):
- 我会有一个初始断点(就像你用来截屏的那个),然后打印
System.identityHashCode(object)
我感兴趣的对象。 - 然后我将使用条件
System.identityHashCode(object) == <whatever number you saw at the previous step>
创建一个断点.这种情况很少会停在错误的对象上。
或者如果您感兴趣的对象有一个合适的 toString()
您可以使用的表示,您也可以尝试使用它来代替 System.identityHashCode(object)
.在所有情况下,您都不必依赖 Eclipse 的内部对象 ID,而是捕获这样的 id
(或几乎)可以从对象本身派生。
关于jvm中的Java对象ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3289550/