一、实体类为什么要重写equals和hashCode方法
根据hashCode规范,两个对象相等hashCode必须相等,两个hashCode相等对象可以不一定相等。所以重写equals方法hashCode方法也要重写,不然会出现两个对象相等但是hashCode不相等的情况,会导致散列存储结构的出现问题。因为散列存储结构底层是根据hashCode来决定存储位置的,比如HashSet,如果两个equals相等的对象有两个不同的hashCode,那么就无法实现去重。如下所示:
二、如何重写
equals重写:一般是把对象的所有属性进行对比。
hashCode重写:一般是调用Objects.hash()传入所有属性计算hashCode值。