equals() 方法和 == 运算符之间的关系
Relation between equals() method and == operator
我知道==
运算符适用于原始类型的内容比较和对象的引用比较。
同理,对象class的.equals()
方法是对象的引用比较,字符串和wrapper中的内容比较classes.
但是我从SCJP/OCJP笔记中得到的以下几点,我无法理解。我在网上查看,只发现 ==
和 .equals
之间的差异,但没有发现下面提到的关系。
- 如果
r1==r2
为真,则 r1.equals(r2)
始终为真。
- 如果
r1==r2
为假,则 r1.equals(r2)
可能 return 为真(或)为假。
- 如果
r1.equals(r2)
为真,则 r1==r2
可能 return 为真(或)为假。
- 如果
r1.equals(r2)
为假,则 r1==r2
始终为假。
这些要求确保 equals
方法将具有人们对 等效性 概念和 logical/mathematical 属性所期望的语义。
因此,我们期望等价性传递:如果 A 等于 B 且 B 等于 C,则 A 等于 C。我们期望 对称性:如果 A 等于 B,则 B 等于 A。我们期望相等性 自反 :A 等于 A。
我知道==
运算符适用于原始类型的内容比较和对象的引用比较。
同理,对象class的.equals()
方法是对象的引用比较,字符串和wrapper中的内容比较classes.
但是我从SCJP/OCJP笔记中得到的以下几点,我无法理解。我在网上查看,只发现 ==
和 .equals
之间的差异,但没有发现下面提到的关系。
- 如果
r1==r2
为真,则r1.equals(r2)
始终为真。 - 如果
r1==r2
为假,则r1.equals(r2)
可能 return 为真(或)为假。 - 如果
r1.equals(r2)
为真,则r1==r2
可能 return 为真(或)为假。 - 如果
r1.equals(r2)
为假,则r1==r2
始终为假。
这些要求确保 equals
方法将具有人们对 等效性 概念和 logical/mathematical 属性所期望的语义。
因此,我们期望等价性传递:如果 A 等于 B 且 B 等于 C,则 A 等于 C。我们期望 对称性:如果 A 等于 B,则 B 等于 A。我们期望相等性 自反 :A 等于 A。