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()); 
      }
    
  • 相关阅读:
    React项目搭建与部署
    桌面应用之electron开发与转换
    React Native之支付集成(微信 支付宝)(ios android)
    WEB通知和React Native之即时通讯(iOS Android)
    React Native之配置URL Scheme(iOS Android)
    Mybatis操作oracle数据库的一些坑
    java -jar和hadoop jar的区别
    springBoot启动的时候动态选择装载某些bean
    Java常用正则表达式
    java获取当前运行的方法名称
  • 原文地址:https://www.cnblogs.com/lori/p/10907633.html
Copyright © 2011-2022 走看看