gpt4 book ai didi

java - 在 Java 中打印用于调试目的的唯一对象标识

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:33 26 4
gpt4 key购买 nike

让我们从代码开始。

Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);

然后在其他地方再次执行相同的代码,或者可能在不同的线程中再次执行同一段代码。

Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);

现在,如果 obj 是相同的对象,则调试打印显然是相同的。但如果它们不同,仍然有可能发生散列冲突,因此即使对于不同的对象,打印输出也可能相同。因此,具有相同的输出(或更一般地说,相同的字符串)并不能保证相同的对象。

问题:在 Java 中有没有办法为任意对象获取唯一的 id string?或者更正式地说,提供 static String Id.str(Object o) 方法,这样总是为真:

final Object obj1 = ...;
final String firstId = Id.str(obj1);
// arbitrary time passes, garbage collections happen etc.
// firstId and obj1 are same variables as above
(firstId.equals(Id.str.obj2)) == (obj1 == obj2)

最佳答案

我认为实际上没有任何方法(即技术)可以保证对象 ID 的唯一性。这种标识的唯一目的是有一种方法来寻址该对象在内存中的数据。万一这个对象死了,然后被 GC 从内存中移除,没有人会限制系统使用它以前的地址空间来放置新对象的数据。

但实际上在很短的一段时间内,在您的程序中有任何引用的所有可用对象中,System.identityHashCode(obj) 实际上会给您一个唯一 对象的身份。这是因为此 hashCode 是使用对象在内存中的位置计算的。但是,它是一个实现功能,没有记录并且不能保证其他 JVM。

此外,您还可以阅读这个著名的 QA:Java: How to get the unique ID of an object which overrides hashCode()?

关于java - 在 Java 中打印用于调试目的的唯一对象标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499969/

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