【发布时间】:2015-04-04 09:30:10
【问题描述】:
我知道== 运算符适用于原始类型的内容比较和对象的引用比较。
同样,对象类的.equals()方法用于对象的引用比较以及字符串和包装类中的内容比较。
但我从 SCJP/OCJP 笔记中获得的以下几点,我无法理解。我在网上查了一下,只发现== 和.equals 之间的区别,但没有发现下面提到的关系。
- 如果
r1==r2为真,则r1.equals(r2)始终为真。 - 如果
r1==r2为假,那么r1.equals(r2)可能返回真(或)假。 - 如果
r1.equals(r2)为真,那么r1==r2可能返回真(或)假。 - 如果
r1.equals(r2)为假,则r1==r2始终为假。
【问题讨论】:
-
你有什么问题?
-
“对象类的
equals()方法用于对象的引用比较以及字符串和包装类中的内容比较”的说法是错误的。有许多类将equals()定义为内容的比较。它的目的是在有意义的地方声明一个“值”相等(字符串、数字、颜色、集合、坐标),并且它默认为对象标识,就作者而言,没有“值”相等。跨度> -
@RealSkeptic 声明“对象类的equals()方法用于对象的引用比较以及字符串和包装类中的内容比较”是正确的。可能还有其他类定义了 equals() 但至于 OP 提到的是正确的
-
@KKK - 仅当您认为
Point或List等事物不是对象时...