mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-04-09 19:10:42 +08:00
Update 10. 重写equals方法时遵守通用约定.md
This commit is contained in:
parent
21680a3164
commit
52ccfe71a4
@ -27,10 +27,10 @@ public boolean equals(Object o) {
|
||||
当你重写 equals 方法时,必须遵守它的通用约定。Object 的规范如下:
|
||||
equals 方法实现了一个等价关系(equivalence relation)。它有以下这些属性:
|
||||
|
||||
- **自反性:**对于任何非空引用 x,`x.equals(x)` 必须返回 true。
|
||||
- **对称性:**对于任何非空引用 x 和 y,如果且仅当 `y.equals(x)` 返回 true 时 `x.equals(y)` 必须返回 true。
|
||||
- **传递性:**对于任何非空引用 x、y、z,如果 `x.equals(y)` 返回 true,`y.equals(z)` 返回 true,则 `x.equals(z)` 必须返回 true。
|
||||
- **一致性:**对于任何非空引用 x 和 y,如果在 equals 比较中使用的信息没有修改,则 `x.equals(y)` 的多次调用必须始终返回 true 或始终返回 false。
|
||||
- **自反性:** 对于任何非空引用 x,`x.equals(x)` 必须返回 true。
|
||||
- **对称性:** 对于任何非空引用 x 和 y,如果且仅当 `y.equals(x)` 返回 true 时 `x.equals(y)` 必须返回 true。
|
||||
- **传递性:** 对于任何非空引用 x、y、z,如果 `x.equals(y)` 返回 true,`y.equals(z)` 返回 true,则 `x.equals(z)` 必须返回 true。
|
||||
- **一致性:** 对于任何非空引用 x 和 y,如果在 equals 比较中使用的信息没有修改,则 `x.equals(y)` 的多次调用必须始终返回 true 或始终返回 false。
|
||||
- 对于任何非空引用 x,`x.equals(null)` 必须返回 false。
|
||||
|
||||
除非你喜欢数学,否则这看起来有点吓人,但不要忽略它!如果一旦违反了它,很可能会发现你的程序运行异常或崩溃,并且很难确定失败的根源。套用约翰·多恩 (John Donne) 的说法,没有哪个类是孤立存在的。一个类的实例常常被传递给另一个类的实例。许多类,包括所有的集合类,都依赖于传递给它们遵守 equals 约定的对象。
|
||||
|
Loading…
Reference in New Issue
Block a user