下面给出编写一个完美的equals方法的建议:
1)显式参数命名为otherObject,稍后需要将它转换成另一个叫做other的变量
2)检测this与otherObject是否引用同一个对象
:if(this ==
otherObject) return true;
3) 检测otherObject是否为null
,如果为null,返回false.if(otherObject == null) return
false;
4) 比较this与otherObject是否属于同一个类
如果equals的语义在每个子类中有所改变,就使用getClass检测
:if(getClass()!=otherObject.getClass())
return false;
如果所有的子类都拥有统一的语义,就使用instanceof检测
:if(!(otherObject instanceof
ClassName)) return false;
5) 将otherObject转换为相应的类类型变量:ClassName other = (ClassName) otherObject;
6) 现在开始对所有需要比较的域进行比较
。使用==比较基本类型域,使用equals比较对象域。如果所有的域都匹配,就返回true,否则就返回flase.
如果在子类中重新定义equals,就要在其中包含调用super.equals(other)
——参考《Java2核心技术 第一卷:基础知识》
当此方法被重写时,通常有必要重写 hashCode
方法,以维护 hashCode
方法的常规协定,该协定声明
相等对象必须具有相等的哈希码 。
【改写equals方法时,总是要改写hashCode方法】
分享到:
相关推荐
本文讲述了什么时候重写equals方法和如何重写equals方法。
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
NULL 博文链接:https://zpointer.iteye.com/blog/1058337
重写equals和hashcode方法,学习和进步
主要介绍了浅谈java 重写equals方法的种种“坑”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
为什么重写equals方法,还必须要重写hashcode方法
equals方法重写作业,Students类,有三个属性id ,name ,grade。还有一个测试类用于测试创建了三个对象前两各对象的数据完全一样,第三个对象的数据不同。使用equals方法比较。并输出结果。
重写toString和equals方法的意义以及方法
下面小编就为大家带来一篇java中重写equals()方法的同时要重写hashcode()方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
关于重写equals,hashcode以及compareTo方法!
2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....
主要介绍了Java重写equals及hashcode方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
方法重写equals和多态
java_equals用法,用来熟悉重写equals方法的
主要介绍了java中重写equals和重写hashCode()的相关资料,需要的朋友可以参考下
主要给大家介绍了关于java中为什么重写equals时必须重写hashCode方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
winform 重写Equals源码! 很值得下载看看!资源免费,大家分享!!
Java中equals方法隐藏的陷阱
Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例