Java中关于equals和hashCode的关系

一,Java 对于 eqauls 方法和 hashCode 方法是这样规定的:

(1)如果两个对象相同(equals 方法返回 true),那么它们的 hashCode 值一定要相同;

(2)如果两个对象的 hashCode 相同,它们并不一定相同。

当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

 

二,实现高质量的 equals 方法的诀窍包括:

1. 使用==操作符检查"参数是否为这个对象的引用;

2. 使用 instanceof 操作符检查"参数是否为正确的类型";

3. 对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;

4. 编写完 equals 方法后,问自己它是否满足对称性、传递性、一致性;

5. 重写 equals 时总是要重写 hashCode;

6. 不要将 equals 方法参数中的 Object 对象替换为其他的类型,在重写时不要忘掉@Override 注解。

posted @ 2019-08-15 16:42  Noperx  阅读(153)  评论(0编辑  收藏  举报