如果equals正确实现该方法,则按照对象的javadoc的要求:
- 它是自反的:对于任何非空引用值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,x.equals(y)的多次调用始终返回true或始终返回false,前提是不修改在对象的equals比较中使用的信息.
- 对于任何非空引用值x,x.equals(null)应返回false.
我们可以推断x.equals(z)必须是假的.
证明,如果equals()是传递和对称的,则x.equals(y)为false且y.equals(z)为真:
1)假设x.equals(z)为真;
2)z.equals(y)为真(对称);
1 + 2)x.equals(y)为真(传递1和2)
但是x.equals(y)给出为假,因此数字1或数字2必须是错误的,即x.equals(z)为假或函数不对称.
但如果equals()没有实现对称,你就不能说结果x.equals(z)(参见其他答案;我对@Stephen C答案的评论)
| 归档时间: |
|
| 查看次数: |
3673 次 |
| 最近记录: |