简单解释为啥重写equals后要重写hashCode

173 阅读1分钟

重写equals的原因很简单,equals不重写的时候对于引用数据类型比较的是地址,也就是说

Person A = new Person();
Person B = new Person();

A.setId(1);
B.setId(1);

A.equals(B)返回的是false,但是逻辑上我们应该认为这两个是同一人,因此需要重写equals来满足这种需求。

为啥要重写hashCode呢?因为hashCode跟地址有关系,逻辑相同的两个对象的hashCode值是不同的。

如果放到HashSet中,先判断hashCode,发现不冲突,两个逻辑相同的对象都会被放到hashSet中