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
publicclassA{publicbooleanequals(Object otherObject){//测试两个对象是否是同一个对象,是的话返回trueif(this==otherObject)returntrue;//测试检测的对象是否为空,是就返回falseif(otherObject==null)returnfalse;//测试两个对象所属的类是否相同,否则返回falseif(getClass()!=otherObject.getClass())returnfalse;//对otherObject进行类型转换以便和类A的对象进行比较A other=(A)otherObject;//对于值可能为null的属性,检测时应使用Object的equals方法,不为null的可以直接使用==检测returnObject.equals(类A对象的属性A,other的属性A)&&类A对象的属性B==other的属性B……; } }
在子类定义equals方法时使用super.equals方法进行重载复写。
一般来说,重写了equals方法就同时也要重写hashCode方法
重写hashCode方法的原因
publicinthashCode(){//其中Double根据需要换成所需类型,第一个乘数因子为素数(也叫质数)return7*Object.hashCode(有可能为null的属性A)+11*newDouble(不为null的属性B).hashcode()+ ……}
或者有更简单的方法
publicinthashCode(){returnObject.hashCode(属性A,属性B,属性C,……);}
That's all.
需要学习资料和路线可以加Java高级交流群: ( 725633148 ) 每晚8点高清在线直播与你分享java企业当下招聘人才需求,怎么学Java,和学习什么内容,相信你了解之后对你今后学习Java会有非常大的帮助。
�