-
需求
在Java开发时,很多时候会自定义一些实体,并且会产生判断两个自定义实体是否相等的操作;此时如果直接使用Java原生的equals方法很多时候会返回false(因为比较的两个Object的引用是否相等),但是我们实际的需求仅仅是比较两个自定义对象的某些属性值是否是相同的。
-
做法
要达到这样的目的,我们就要在自定义的实体类中进行equals方法的重写(在其中实现自己的相等判断逻辑)。
要注意:在重写equals的同时,也需要重写hashcode方法。
-
重写hashcode的原因
hashcode方法主要用在集合框架中,目的是为了快速比较道两个对象是否相等(符合自定义要求,用某些属性值是否相等代表该对象是否相等),因为集合框架中的对象很多,每个都使用equals比较效率很差。
每个对象都有一个hashcode,规定:
A.内容相同的对象hashcode肯定相等
B.内容不相同的对象hashcode可能相等也可能不相等
所以如果两个自定义对象的hashcode不相等则两个对象的内容肯定不相等,这样就不必一个一个去比较属性的属值了,从而提高对象比较的速度。