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()); 
      }
    
  • 相关阅读:
    永久破解之phpstorm
    CPU线程和Java线程
    kvm自动扩容内存
    swoole http server 信息
    mac 安装PHP redis扩展phpredi-5.0.2
    el-tree,很恶心的树,就从默认展开节点开始吧
    转开发啦,就从最基础的数据转换开始吧
    Java集合系列-HashSet
    Java基础系列-单例的7种写法
    Java基础系列-Lambda
  • 原文地址:https://www.cnblogs.com/lori/p/10907633.html
Copyright © 2011-2022 走看看