Bootstrap

如何使用hashCode()和equals()方法 - Java

在这篇文章中,我将指出我对hashCode()和equals()方法的理解。我将讨论它们的默认实现以及如何正确地覆盖它们。我还将使用Apache Commons包中的实用工具类来实现这些方法。

hashCode()和equals()方法已经在Object类中定义,而Object类是所有Java对象的父类。因为这个原因,所有的Java对象从Object类继承了这些方法的默认实现。

本文中的章节:

  • hashCode()和equals()用法
  • 重写默认行为
  • 用Apache Commons Lang重写equals()和hashCode()
  • 需要记住的重要的事项
  • 在ORM中使用时要注意的地方

hashCode()和equals()方法的用法

hashCode()方法用于获取给定对象的唯一的整数。当这个对象需要存储在哈希表这样的数据结构时,这个整数用于确定桶的位置。默认情况下,对象的hashCode()方法返回对象所在内存地址的整数表示。

equals()方法用来简单验证两个对象的相等性。默认实现只检查两个对象的对象引用,以验证它们的相等性。

重写默认行为

通常情况下,类一切运行的都很好,根本不需要重写它们,但是有时应用程序需要更改某些对象的默认行为。

让我们举一个例子,比如有一个应用程序拥有员工对象。让我们创建一个尽可能简单的员工类:

public class Employee
{
   
    private Integer id;
    private String firstname;
    private String lastName;
    private String department;
 
    public Integer getId() {
   
        return id;
    }
    public void setId(Integer id) {
   
        this.id = id;
    }
    public String getFirstname() {
   
        return firstname;
    }
    public void setFirstname(String firstname) {
   
        this.firstname = firstname;
    }
    public String getLastName() {
   
        return lastName;
    }
    public void setLastName(String lastName) {
   
        this.lastName = lastName;
    }
    public String getDepartment() {
   
        return department;
    }
    public void setDepartment(String department) {
   
        this.department = department;
    }
}

上面的员工类有一些非常基本的属性和访问方法。现在考虑一个简单的情况,您需要比较两个员工对象。

public class 
;