java - 如何为子类编写hashCode()

标签 java hashcode

我有一个关于 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() 可以做到这一点。

当然,如果BC添加任何新字段(这很常见),那么它们应该覆盖hashCode(),调用 super.hashCode() 并“扩展”该值。

此外,正如 @bradimus 在问题评论中暗示的那样,当您重写 hashCode() 时,您很可能还应该重写 equals()

关于java - 如何为子类编写hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35564136/

相关文章:

java - 如果您的对象仅由接口(interface)组成,如何定义 hashcode 和 equals?

java - 根据字段是否存在,使用 Spring 从 MongoDB 投影 boolean 值

java - 为什么Java中不捕获返回值可以?

java - 在Spring Controller 中获取参数的简单方法?

java - java中的String hashCode是预先计算的吗?

java - 为什么 String.equals() 不在后台使用 hashCode() 相等性检查?

Java-使用HashMap实现矩阵

java - 哪个 jar 和 spring 版本<mvc :resource> come?

ruby - 单个 ruby​​ 进程中的数字上的 `hash` 是否一致?

java - 如何在java中使用md5计算哈希值