effective-java-三
第八条:覆盖equals时请遵守通用约定
- 类的每个实例本质上都是唯一的
- 不关心类是否提供了“逻辑相等”的测试功能
- 超类已经覆盖了equals, 从超类继承过来的行为对于子类也是合适的
- 类是私有的或者包级别私有的,可以确定它的equals方法永远不会被调用
equals方法实现了等价关系
- 自反性: 对于任何非
null
的引用值x
,x.equals(x)
必须返回true
; - 对称性: 对于任何非
null
的引用值x
和y
, 当且仅当x.equals(y)
返回true
时,y.equals(x)
必须返回true
; - 传递性: 对于任何非
null
的引用值x
,’y’和z
,如果x.equals(y)
返回true
,并且y.equals(z)
也返回true
,那么x.equals(z)
也必须返回true
; - 一致性: 对于任何非
null
的引用值x
和y
,只要equals
中的比较信息没有被改变,多次调用x.equals(y)
就会一直返回true
或者false
; - 对于任何非
null
的引用值x
,x.equals(null)
必须返回false
;