如何获取列表的地址?

时间:2013-12-17 15:59:18

标签: 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));

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

3 个答案:

答案 0 :(得分:8)

我猜你想要

 System.identityHashCode(list);

javadoc说

  

返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖hashCode()。

答案 1 :(得分:6)

  

是否有可能找到它的地址?

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

if (list1 == list2)
{
    // They're the same
}

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

答案 2 :(得分:2)

对象的地址在Java中没有固定,它可以移动,所以你无法得到它。

为什么不直接查看if(list1 == list2)