假设我有两种类型 A
和 B
,它们都有一个唯一的 id
字段,下面是我通常如何实现 equals( ) 和 hashCode() 方法:
@Override
public boolean equals(Object obj) {
return obj instanceof ThisType && obj.hashCode() == hashCode();
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] { id });
}
在那种情况下,假设 A
和 B
都有一个 1-arg 构造函数来设置它们各自的 id
字段,
new A(1).equals(new A(1)) // prints true as expected,
new A(1).equals(new A(2)) // prints false as expected,
new A(1).equals(new B(1)) // prints false as expected.
还有,
new A(1).hashCode() == new B(1).hashCode() // prints true.
我想知道两个 hashCode 是否相等是否重要,即使这两个对象不是来自同一类型? hashCode() 可以用在 equals() 之外的其他地方吗?如果是,目的是什么?
我考虑过如下实现这两种方法:
@Override
public boolean equals(Object obj) {
return obj != null && obj.hashCode() == hashCode();
}
@Override
public int hashCode() {
return Arrays.hashCode(new Object[] { getClass(), id });
}
将类添加到 hashCode 生成将解决这个潜在问题。你怎么认为?有必要吗?
最佳答案
对于不同类的对象,相同的hashCode()
没有关系。 hashCode()
只是表示对象可能相同。如果例如HashSet
遇到相同的 hashCode()
时,它将使用 equals()
测试是否相等。
关于java - 两个 hashCode 是否相等是否重要,即使这两个对象不是来自同一类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14749229/