1. 程式人生 > >為什麽要重寫equals和hashcode方法

為什麽要重寫equals和hashcode方法

.get hash -a style radi his string 了解 com

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);
}

重新調用的結果:

技術分享圖片

為什麽要重寫equals和hashcode方法