在这篇文章中,我将指出我对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