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()); 
      }
    
  • 相关阅读:
    Android UI之LinearLayout详解
    在zxing开源项目里,camera.setDisplayOrientation(90)出现错误
    DjangoORM获取值的不同类型
    DjangoORM操作数据库
    Django的URL写法
    创建django项目的基础命令&知识(一)
    python读取EXCEL的某一列,并保存到txt文本中
    后台管理页面基础布局HTML+CSS
    使用yaml格式进行接口测试报错
    常见的sql语句练习
  • 原文地址:https://www.cnblogs.com/lori/p/10907633.html
Copyright © 2011-2022 走看看