- 自反性
- 对于任何非空引用 x,x.equals(x) 因该返回 true。
- 对称性
- 对于任何引用 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 返回 true。
- 传递性
- 对于任何引用 x、y 和 z,如果 x.equals(y) 应该返回同样的结果。
- 一致性
- 如果 x 和 y 引用的对象没有发生变化,反复调用 x.eqauls(y) 应该返回同样的结果
- 对于任意非空引用 x,x.equals(null) 应该返回 false
如果子类可以有自己相等性的概念,则对称性需求将强制使用 getClass 检测。
如果由超类决定相等性概念,那么就可以使用 instanceof 检测,这样可以在不同子类的对象之间进行相等性比较。