Java⾃定义类中重写equals⽅法
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 {
java重写和重载的区别public boolean equals(Object otherObject)
{ //测试两个对象是否是同⼀个对象,是的话返回true
if(this==otherObject) return true; //测试检测的对象是否为空,是就返回false
if(otherObject==null) return false; //测试两个对象所属的类是否相同,否则返回false
if(getClass()!=Class()) 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 7*Object.hashCode(有可能为null的属性A)+ 11*new Double(不为null的属性B).hashcode()+
……
}
或者有更简单的⽅法
public int hashCode(){ return Object.hashCode(属性A,属性B,属性C,……);
}
欢迎⼯作⼀到五年的Java⼯程师朋友们加⼊Java技术交流:659270626
内提供免费的Java架构学习资料(⾥⾯有⾼可⽤、⾼并发、⾼性能及分布式、Jvm性能调优、Spring源
码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构
资料)合理利⽤⾃⼰每⼀分每⼀秒的时间来学习提升⾃⼰,不要再⽤"没有时间“来掩饰⾃⼰思想上的懒惰!趁年轻,使劲拼,给未来的⾃⼰⼀个交代!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论