Java中hashCode和equals方法的正确使用

发表于:2012-10-24 09:37

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:王振威    来源:51Testing软件测试网采编

  在这篇文章中,我将告诉大家我对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

  1. public class Employee  
  2. {  
  3.     private Integer id;  
  4.     private String firstname;  
  5.     private String lastName;  
  6.     private String department;  
  7.     public Integer getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(Integer id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getFirstname() {  
  14.         return firstname;  
  15.     }  
  16.     public void setFirstname(String firstname) {  
  17.         this.firstname = firstname;  
  18.     }  
  19.     public String getLastName() {  
  20.         return lastName;  
  21.     }  
  22.     public void setLastName(String lastName) {  
  23.         this.lastName = lastName;  
  24.     }  
  25.     public String getDepartment() {  
  26.         return department;  
  27.     }  
  28.     public void setDepartment(String department) {  
  29.         this.department = department;  
  30.     }  
  31. }

  上面的Employee类只是有一些非常基础的属性和getter、setter。现在来考虑一个你需要比较两个employee的情形。

  1. public class EqualsTest {  
  2.     public static void main(String[] args) {  
  3.         Employee e1 = new Employee();  
  4.         Employee e2 = new Employee();  
  5.         e1.setId(100);  
  6.         e2.setId(100);  
  7.         //Prints false in console 
  8.         System.out.println(e1.equals(e2));  
  9.     }  
  10. }

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号