为什么要重写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方法。
————————————————

posted @ 2019-08-20 18:10  李艳艳665  阅读(2453)  评论(0编辑  收藏  举报