zoukankan      html  css  js  c++  java
  • 为什么要重写equals和hashcode方法

    当新建一个java类时,需要重写equals和hashcode方法,大家都知道!但是,为什么要重写呢?
    需要保证对象调用equals方法为true时,hashcode必须相同.

    先看下面的例子:
    没有重写equals和hashcode方法User类

    public class User {
      
      private Integer age;
      private String name;
    
      public User() {
      }
    
      public User(Integer age, String name) {
        this.age = age;
        this.name = name;
      }
    
      public Integer getAge() {
        return age;
      }
    
      public void setAge(Integer age) {
        this.age = age;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    }
    
    @Test
    public void test01(){
      User user1 = new User(12, "lyf");
      User user2 = new User(12, "lyf");
      System.out.println("hashcode值:");
      System.out.println(user1.hashCode());
      System.out.println(user2.hashCode());
      System.out.println("是否相等:");
      System.out.println(user1.equals(user2));
    }
    

     


     

    用相同的值创建两个对象,发现hashcode不同,并且equals也为false.

     

    了解hashcode算法的话你会明白,即使hashcode相同值也有可能不同!那么,就需要我们重写这两个方法.

    @Override
    public boolean equals(Object o) {
      if (this == o) return true;
      if (o == null || getClass() != o.getClass()) return false;
      User user = (User) o;
      return Objects.equals(age, user.age) &&
          Objects.equals(name, user.name);
    }
    
    @Override
    public int hashCode() {
      return Objects.hash(age, name);
    }
    

    重新调用的结果:

     


     

     

  • 相关阅读:
    mysql卸载
    Nginx配置Https(详细、完整)
    国产数据库
    win11系统安装全过程
    微星b460主板如何开启TPM2.0
    如何查看计算机是否开启TPM2.0
    c语言实现复制文件
    如何使用格式工厂把视频变小
    格式工厂合并视频和音频文件
    IDM下载B站视频多个文件,视频、音频分开如何处理
  • 原文地址:https://www.cnblogs.com/linyufeng/p/9946581.html
Copyright © 2011-2022 走看看