码迷,mamicode.com
首页 > 其他好文 > 详细

为什么要重写equals和hashcode方法

时间:2018-11-12 15:46:25      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:int   src   创建   对象   round   oid   不同   12px   null   

当新建一个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);
}

重新调用的结果:

 

技术分享图片
 

 

为什么要重写equals和hashcode方法

标签:int   src   创建   对象   round   oid   不同   12px   null   

原文地址:https://www.cnblogs.com/linyufeng/p/9946581.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!