Java自定义类中重写equals方法

549 阅读2分钟

equals方法的要求: a.自反性:对于任何非空的x,x.equals(x)都应该返回true b.对称性:对于任何引用x和y,当且仅当x.equals(y)返回true时,y.equals(x)也应该返回true c.传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true d.一致性:如果x和y的引用没有发生变化,那么反复调用x.equals(y)的结果应该相同 e.对于任何非空的引用x,x.equals(null)应该返回false

public class A
{
public boolean equals(Object otherObject) { //测试两个对象是否是同一个对象,是的话返回true if(this==otherObject) return true; //测试检测的对象是否为空,是就返回false if(otherObject==null) return false; //测试两个对象所属的类是否相同,否则返回false if(getClass()!=otherObject.getClass()) return false; //对otherObject进行类型转换以便和类A的对象进行比较 A other=(A)otherObject; //对于值可能为null的属性,检测时应使用Object的equals方法,不为null的可以直接使用==检测 return Object.equals(类A对象的属性A,other的属性A)&&类A对象的属性B==other的属性B……; }
} 在子类定义equals方法时使用super.equals方法进行重载复写。

一般来说,重写了equals方法就同时也要重写hashCode方法

重写hashCode方法的原因 public int hashCode() { //其中Double根据需要换成所需类型,第一个乘数因子为素数(也叫质数) return 7Object.hashCode(有可能为null的属性A)+ 11new Double(不为null的属性B).hashcode()+ …… } 或者有更简单的方法

public int hashCode() { return Object.hashCode(属性A,属性B,属性C,……); } That's all.

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,

需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,

但跳槽时面试碰壁。

需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,

常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。

但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

  1. 群号:高级架构群 Java进阶群:180705916.备注好信息!送架构视频。

6.阿里Java高级大牛直播讲解知识点,分享知识,

多年工作经验的梳理和总结,带着大家全面、

科学地建立自己的技术体系和技术认知!