首页 > 其他 > 详细

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

时间:2019-08-20 18:46:50      阅读:113      评论:0      收藏:0      [点我收藏+]

因为默认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方法。
————————————————

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

原文:https://www.cnblogs.com/liyanyan665/p/11384670.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!