重写hashcode和equals的注意事项

重写equals时需要注意满足java语言规范对于equals的要求:

Java语言规范要求equals需要具有如下的特性: 

  1. 自反性:对于任何非空引用 x,x.equals() 应该返回 true
  2. 对称性:对于任何引用 x 和 y,当且仅当 y.equals(x) 返回 truex.equals(y) 也应该返回 true
  3. 传递性:对于任何引用 x、y 和 z,如果 x.equals(y)返回 truey.equals(z) 也应返回同样的结果。
  4. 一致性:如果 x 和 y 引用的对象没有发生变化,反复调用 x.equals(y) 应该返回同样的结果。
  5. 对于任意非空引用 x,x.equals(null) 应该返回 false

重写hashCode时注意事项

重写hashCode方法时除了上述一致性约定,还有以下几点需要注意:

(1)返回的hash值是int型的,防止溢出。

(2)不同的对象返回的hash值应该尽量不同。(为了hashMap等集合的效率问题)

你可能感兴趣的:(java基础)