我需要检查返回的列表是否创建过一次,或者它是否是对象的副本.有可能找到它的地址吗?
// 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,因此它将返回有效的哈希码而不是地址.
我想你想要的
System.identityHashCode(list);
Run Code Online (Sandbox Code Playgroud)
javadoc说
返回给定对象的相同哈希码,就像默认方法hashCode()返回的一样,无论给定对象的类是否覆盖hashCode().
有可能找到它的地址吗?
不可以.但是,您可以检查参考相等性 - 这是您关心的所有内容:
if (list1 == list2)
{
// They're the same
}
Run Code Online (Sandbox Code Playgroud)
如果您真的想通过日志记录执行此操作,则可以使用System.identityHashCode,但请注意,这并不意味着被视为地址.它仍然是一个哈希码,并不保证是唯一的.它可能与某些内部地址有关,但这远远不能保证.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |