java的equals方法重写注意事项

原创 2014年06月06日 13:19:14

java的equals方法一般情况下需要重写,以保证能够比较两个实例对象是否一致。

package chap09;

import static java.lang.System.out;
import java.util.Date;

public class EqualsTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		out.println("successful");
		
		Employee e1 = new Employee();
		Employee e2 = new Employee();
		
		out.println(e1 == e2);
		out.println(e1.hashCode());
		out.println(e2.hashCode());
	}

}

class Employee implements Cloneable {
	
	@Override
	public boolean equals(Object obj) {
		
		/** 
		 * equals must five steps:
		 *   1:two variable are point to the same object.
		 *   2:obj is null.
		 *   3:variables is the same Class.
		 *   4:cast obj.
		 *   5:equals each field's value(== for primitive; equals for object).
		 * */
		if (this == obj) {
			return true;
		}
		
		if ((obj == null) || (this.getClass() != obj.getClass())) {
			return false;
		}
		
		Employee other = (Employee)obj;
		
		return ((this.name.equals(other.name) &&
				(this.salary == other.salary) &&
				(this.hireDay.equals(other.hireDay))));
	}
	
	@Override
	public Employee clone() throws CloneNotSupportedException {
		
		return (Employee)super.clone();
	}
	
	private String name;
	private double salary;
	private Date hireDay;
}

class Manager extends Employee {

	@Override
	public boolean equals(Object obj) {
		
		/**
		 * derived class's equals method have three steps to equals two objects.
		 *   1:call the super object to equals with obj.
		 *   2:cast obj.
		 *   3:each field value, which are added in this class.
		 * */
		if ( !super.equals(obj)) {
			return false;
		}
		
		Manager other = (Manager)obj;
		
		return (this.bonus == other.bonus);
	}
	
	private double bonus;
}


java重写equals方法需要注意的几点

尽管object是一个具体类,涉及它就是为了扩展它,它所有的非final方法(equals,hashCode,toString,clone和finalize)都有一些通用的规定,因为它们被设计就是用来...
  • dimudan2015
  • dimudan2015
  • 2017年04月04日 08:29
  • 1258

如何正确的重写equals() 和 hashCode()方法

equals和hashCode重写技巧
  • zzg1229059735
  • zzg1229059735
  • 2016年05月25日 15:36
  • 6457

java 中 重写equals方法的用处

以前只是在学习java的时候遇到了equals方法,对于重写equals有什么用是一点也不清楚,今天在项目在做比对的时候出了问题, 就试着重写了equals方法,结果就解决了问题。 在开发的时...
  • footballclub
  • footballclub
  • 2015年01月05日 14:33
  • 2588

如何重写hashCode()和equals()方法

hashCode()和equals()方法可以说是Java完全面向对象的一大特色.它为我们的编程提供便利的同时也带来了很多危险.这篇文章我们就讨论一下如何正解理解和使用这2个方法. 如何重写equ...
  • tracker_w
  • tracker_w
  • 2013年12月02日 12:57
  • 19149

Java Set详解及实例,重写equals()和hashCode()

详细讲解HashSet的特点,HashSet元素的存储原理,HashSet实例
  • zcl_666
  • zcl_666
  • 2016年09月19日 10:44
  • 2499

重写Object中的equals方法

在比较两个对象时可以使用==和equals()。==用于比较两个对象的引用地址是否相等,而equals()方法主要用于比较两个对象的内容是否相等。         在Object中已定义了equal...
  • free9277
  • free9277
  • 2013年04月07日 17:51
  • 1210

什么时候需要重写equals方法?为什么重写equals方法,一定要重写HashCode方法?

何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 设计equals() [1]使用instanceof操作符检查“实参是否为正确的类型”。 [...
  • championhengyi
  • championhengyi
  • 2016年12月06日 18:05
  • 2825

详解重写equals()方法就必须重写hashCode()方法的原因

重写的作用: 如果重写(用于需求,比如建立一个Person类,比较相等我只比较其属性身份证相等就可不管其他属性,这时候重写)equals,就得重写hashCode,和其对象相等保持一...
  • u013679744
  • u013679744
  • 2017年02月25日 10:04
  • 2816

为什么要重写hashcode和equals方法?

为什么要重写hashcode和equals方法? 相信很多小伙伴被这个问题给困扰很久了,下面我就给大家详细说一下我的理解吧~ 因为默认的hequals方法是Object的方法,比较的是内存...
  • world6
  • world6
  • 2016年08月05日 11:42
  • 1400

java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查

HashMap集合 增 删 改 查 import java.util.HashMap; import java.util.Iterator; import java.util.Map; i...
  • ranmudaofa
  • ranmudaofa
  • 2014年09月22日 23:00
  • 4596
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java的equals方法重写注意事项
举报原因:
原因补充:

(最多只允许输入30个字)