结论先直接上结论:重写equals不一定要重写hashCode,得看情况。如果在没使用容器时其实是没必要的。如果使用了HashMap等容器,并且使用了自定义对象作为Key是一定要重写的。重写equals是为了在业务逻辑上判断实例之间是否相等。重写hascode是为了让集合快速判重。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等。下面举个例子说明一定要重写。而从运行结果来看,两个orderId一致的对象却都成功put到了map中。

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?

重写equals的同时为何要重写hashCode?