重写equals()方法
下面给出编写一个完美的equals方法的建议:
1) 显式参数命名为otherObject,稍后需要将它转换成另一个叫做 other的变量。
2) 检测this与otherObject是否引用同一个对象:
if (this == otherObject) return true;
这条语句只是一个优化。实际上,这是一种经常采用的形
式。因为计算这个等式要比一个一个地比较类中的域所付
出的代价小得多。
3) 检测otherObject是否为null,如果为null,返回false。这项 检测是很必要的。
if (otherObject == null) return false;
比较this与otherObject是否属于同一个类。如果equals的语义在每个子类中有所改变,就使用getClass检测:
if (getClass() != otherObject.getClass()) return false;
如果所有的子类都拥有统一的语义,就使用instanceof检测:
if (! (otherObject instanceof ClassName)) retrun false;
4)将otherObject转换为相应的类类型变量:
ClassName other = (ClassName)otherObject;
5) 现在开始对所有需要比较的域进行比较了。使用 == 比较基本类型域,使用equals比较对象域。如果所有的域都匹 配,就返回ture;否则返回false。
===============================华丽的分割线===============================
转载:http://xyiyy.iteye.com/blog/359219
下面是一个根据业务键实现equals()与hashCode()的例子。实际中需要根据实际的需求,决定如何利用相关的业务键来组合以重写这两个方法。
public class Cat { private String name; private String birthday; public Cat() { } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getBirthday() { return birthday; } //重写equals方法 public boolean equals(Object other) { if(this == other) { //如果引用地址相同,即引用的是同一个对象,就返回true return true; } //如果other不是Cat类的实例,返回false if(!(other instanceOf Cat)) { return false; } final Cat cat = (Cat)other; //name值不同,返回false if(!getName().equals(cat.getName()) return false; //birthday值不同,返回false if(!getBirthday().equals(cat.getBirthday())) return false; return true; } //重写hashCode()方法 public int hashCode() { int result = getName().hashCode(); result = 29 * result + getBirthday().hashCode(); return result; } }
重写父类方法的原则:可以重写方法的实现内容,成员的存取权限(只能扩大,不能缩小),或是成员的返回值类型(但此时子类的返回值类型必须是父类返回值类型的子类型)。
相关推荐
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
重写equals和hashcode方法,学习和进步
为什么重写equals方法,还必须要重写hashcode方法
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
关于重写equals,hashcode以及compareTo方法!
下面小编就为大家带来一篇java中重写equals()方法的同时要重写hashcode()方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
4、重写equals()方法5、为什么要重写hashCode()方法?6、什么时候需要重写hashCode()方法?7、重写hashCode()方法: 1、hashCode与equals两者之间的关系 如果两个对象相同(即用equals比较返回true),那么它们的...
主要给大家介绍了关于java中为什么重写equals时必须重写hashCode方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看String的equals源码 String重写了equals方法,引用指向同一个地址...
主要介绍了java中重写equals和重写hashCode()的相关资料,需要的朋友可以参考下
主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下
首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法
个人学习终结成果:为什么要重新equals和hashCode方法?如何重写?站好马步需从j2se基础开始
hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。 使用hashCode()和equals() hashCode()方法被用来获取给定对象的整数。这个整数被用来确定对象被...
2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回...
java 序列化和重写 hashCode 以及 equals 方法的例子
1.概述 2.为什么重写equels方法要重写hashcode方法 3.例子
equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 hashCode():计算出对象实例的...当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。