为什么要重写equals()方法?


因为默认equals在比较两个对象时,是看他们是否指向同一个地址的。但有时,我们需要两个不同对象只要是某些属性相同就认为它们equals()的结果为true。比如:

person p1?= new person(1,"name");
person p2 = new person(1,"name");
如果不重写equals的话,他们是不相同的,所以我们要重些equals,判断只要他们的id和名字相同equals就为true,在一些集合里有时也这样用,集合里的contain也是用equals来比较

?

先来看Object关于equals()的源码:

public boolean equals(Object obj) {
return (this == obj);
}
?

重写需要注意的属性:
equals方法实现了一个等价关系(equivalence relation)。它有以下这些属性:
? 自反性:对于任何非空引用x,x.equals(x)必须返回true。
? 对称性:对于任何非空引用x和y,如果且仅当y.equals(http://www.amjmh.com/v/BIBRGZ_558768/)返回true时x.equals(y)必须返回true。
? 传递性:对于任何非空引用x、y、z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)必须返回true。
? 一致性:对于任何非空引用x和y,如果在equals比较中使用的信息没有修改,则x.equals(y)的多次调用必须始终返回true或始终返回false。
? 非空性: 对于任何非空引用x,x.equals(null)必须返回false。
当重写equals方法时,同时也要重写hashCode方法。
————————————————


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM