《Effective Java 3rd Edition》读书笔记(二):对于所有对象都通用的方法

Item 10 在改写 equals 的时候请遵守通用约定

equal 方法实现了相等的关系,满足以下特性:

  • Reflexive 自反性,对于任意的非空引用值 x,x.equals(x) 一定为 true;
  • Symmetric 对称性,对于任意的非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 也一定返回 true;
  • Transitive 传递性,对于任意的非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,且 y.equals(z) 也返回 true,那么 x.equals(z) 也一定返回 true;
  • Consistent 一致性,对于任意的引用值 x 和 y,如果用于 equals 比较的对象信息没有被修改的话,那么,多次调用 x.equals(y) 要么一致返回 true,要么一致返回 false;
  • None-nullity 非空性,对于任意非空引用值 x,x.equals(null) 必一定返回 false。

Item 11 改写 equals 时总是要改写 hashCode

Item 12 总是要改写 toString

Item 13 谨慎改写 clone

Item 14 考虑实现 Comparable 接口