在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。
目录:
1、hashCode()和equals()的用法
2、重写默认实现
3、使用Apache Commons Lang包重写hashCode()和equals()
4、需要注意记住的事情
5、当使用ORM的时候特别要注意的
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。
使用hashCode()和equals()
hashCode()方法被用来获取给定对象的唯一整数。这个整数被用来确定对象被存储在HashTable类似的结构中的位置。默认的,Object类的hashCode()方法返回这个对象存储的内存地址的编号。
重写默认的实现
如果你不重写这两个方法,将几乎不遇到任何问题,但是有的时候程序要求我们必须改变一些对象的默认实现。
来看看这个例子,让我们创建一个简单的类Employee
- 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;
- }
- }
|
上面的Employee类只是有一些非常基础的属性和getter、setter。现在来考虑一个你需要比较两个employee的情形。
- public class EqualsTest {
- public static void main(String[] args) {
- Employee e1 = new Employee();
- Employee e2 = new Employee();
- e1.setId(100);
- e2.setId(100);
-
- System.out.println(e1.equals(e2));
- }
- }
|