如何获取列表的地址?

And*_*hev 7 java

我需要检查返回的列表是否创建过一次,或者它是否是对象的副本.有可能找到它的地址吗?

// thread 1
List<Object> list = supplier.get();
System.out.print("list: " + list + "@" + getAddress(list));

// thread 2
List<Object> list = supplier.get();
System.out.print("list: " + list + "@" + getAddress(list));
Run Code Online (Sandbox Code Playgroud)

怎么会getAddress(list)这样?问题是hashCode()通常返回地址的问题被覆盖AbstractList,因此它将返回有效的哈希码而不是地址.

Ren*_*ink 8

我想你想要的

 System.identityHashCode(list);
Run Code Online (Sandbox Code Playgroud)

javadoc说

返回给定对象的相同哈希码,就像默认方法hashCode()返回的一样,无论给定对象的类是否覆盖hashCode().


Jon*_*eet 6

有可能找到它的地址吗?

不可以.但是,您可以检查参考相等性 - 这是您关心的所有内容:

if (list1 == list2)
{
    // They're the same
}
Run Code Online (Sandbox Code Playgroud)

如果您真的想通过日志记录执行此操作,则可以使用System.identityHashCode,但请注意,这并不意味着被视为地址.它仍然是一个哈希码,并不保证是唯一的.它可能某些内部地址有关,但这远远不能保证.