我有一个关于 hashCode 的问题。例如:
class A{
String name;
int age;
@Override
public int hashCode(){
int hash = 0;
hash = age;
hash = 31*hash + name.hashCode();
}
}
class B extends A{
}
class C extends A{
}
我的问题是,如果我实例化一个具有相同名称和年龄的 B 对象和一个 C 对象。那么A和B的hashCode()也是相同的。 hashCode() 正确吗?如果没有,我应该如何修改我的代码?
最佳答案
当然,hashCode()
可以做到这一点。
当然,如果B
或C
添加任何新字段(这很常见),那么它们应该覆盖hashCode()
,调用 super.hashCode() 并“扩展”该值。
此外,正如 @bradimus 在问题评论中暗示的那样,当您重写 hashCode()
时,您很可能还应该重写 equals()
。
关于java - 如何为子类编写hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564136/