如何重写equals和hashcode

发布时间 2024-01-02 21:22:33作者: 前进的蜗小牛

注意equals与==的区别

  • 基本数据类型==比较的是内容而引用类型比较的是对象的内存地址

  • 又因为Object为所有对象的父类所以它的所有子类继承该方法它的源码如下

  • public boolean equals(Object obj) {
            //java中==符号在比较复合型数据类型(类)时比较的是对象在内存中的存放地址,只有同个new出来的对象,
            //他们在内存中的存发地址才一样,比较结果才为true,否则为false
            return (this == obj);
        }
    
  • Object中的equals方法默认还是以==比较所以比较的还是对象的内存地址当不满足需求时可以对其进行方法重写若对其方法重写则相应的hashcode也需要相应的重写

  • hashcode重写

    • package January_2th_03;
      
      public class Person {
          private String name;
          private int age;
      
          public Person() {
      
          }
      
          public Person(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          @Override
          public boolean equals(Object obj) {
              if (obj == null) {
                  return false;
              }
              if (!(obj instanceof Person)) {
                  return false;
              }
              Person eqobj = (Person) obj;
              if (this.name == eqobj.name && this.age == eqobj.age) {
                  return true;
              }
              return false;
          }
      
          @Override
          public int hashCode() {
              int result = 17 ;
              result = 31*result+(name!=null?name.hashCode():0);
              result = 31*result+age;
              return result ;
          }
      }