我对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()是否正确?如果没有,我该怎么做才能修改我的代码?
答案 0 :(得分:2)
当然,hashCode()
可以做到这一点。
当然,如果B
或C
添加了任何新字段(这些字段很常见),那么他们应该覆盖hashCode()
,调用super.hashCode()
并“扩展”价值也是如此。
此外,正如@bradimus在评论中暗示提问时,当您覆盖hashCode()
时,您很可能也会覆盖equals()
。