使用 System.identityHashCode(obj) - 什么时候?为什么?

问题描述 投票:0回答:2

什么时候做第 4 行而不是第 3 行比较合理?或者它们是完全多余的调用吗?

1  Object o1 = new Object();

2  

3  int hcObj = o1.hashCode();

4  int hcSys = System.identityHashCode(o1);
java hashcode
2个回答
11
投票

有时您可能想要创建一组可区分的对象。其中一些对象可能彼此“相等”,但您仍然希望引用所有这些对象......只丢弃真正重复的引用。您可能会这样做,因为 equals 实现不是您感兴趣的(某些类在您确实不希望它们时覆盖

equals
)或者因为您实际上只是想计算单独的实例等.

为了有效地做到这一点(即由某种哈希表支持),您需要一个基于身份而不是相等的哈希码 - 这正是

identityHashCode

为您提供的。它

很少
有用,但有时仍然很方便。


3
投票
Object

来说,是的,这是多余的。但在某些情况下,类可能希望在可能覆盖

hashCode
的类型实例上使用默认的
hashCode
实现(基于引用相等)。

Grepcode

列出这些调用站点

,即包括 IdentityHashMap

 等。

© www.soinside.com 2019 - 2024. All rights reserved.