zoukankan      html  css  js  c++  java
  • 什么时候要重写equals

    什么时候要重写equals

    当对象需要根据值去比较它们是否相等时,需要我们重写equals,而它的hashCode也同时需要被重要,一般来说就是对类里所有成员变更求hashCode。

    没有重写equals时

    一个类型Demo,有两个实例demo1和demo2,当没有直接比较它们时,它们是不相等的,因为它们的引用地址不相同。(默认情况下,equals和==是一样的,比较引用类型的内存地址

    需要根据值比较相等时要重写它们

    class Demo {
      private String name;
      private String email;
    
      public String getEmail() {
        return email;
      }
    
      public void setEmail(String email) {
        this.email = email;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      @Override
      public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Demo demo = (Demo) o;
        return Objects.equals(name, demo.name) &&
            Objects.equals(email, demo.email);
      }
    
      @Override
      public int hashCode() {
    
        return Objects.hash(name, email);
      }
    }
    

    在生成多字段的hashCode时,使用了类型的Objects.hash这个方法,它的源码如下

      public static int hashCode(Object a[]) {
            if (a == null)
                return 0;
    
            int result = 1;
    
            for (Object element : a)
                result = 31 * result + (element == null ? 0 : element.hashCode());
    
            return result;
        }
    

    使用单元测试校验结果

      @Test
      public void hashcode() {
        Demo demo1 = new Demo();
        demo1.setName("zzl");
        Demo demo2 = new Demo();
        demo2.setName("zzl");
        Assert.assertEquals(demo1.getName().hashCode(), demo2.getName().hashCode());
        Assert.assertEquals(demo1.hashCode(), demo2.hashCode()); 
      }
    
  • 相关阅读:
    LeetCode77. 组合
    LeetCode76. 最小覆盖子串
    LeetCode75. 颜色分类
    LeetCode74. 搜索二维矩阵
    LeetCode73. 矩阵置零
    LeetCode72. 编辑距离
    MySQL数据库基础知识点
    程序开发必知必会的MySQL基本命令行操作
    程序开发必知必会的Mysql数据库——初识
    初识HTML
  • 原文地址:https://www.cnblogs.com/lori/p/10907633.html
Copyright © 2011-2022 走看看