【问题标题】:Relation between equals() method and == operator [closed]equals() 方法和 == 运算符之间的关系
【发布时间】: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 - 仅当您认为 PointList 等事物不是对象时...

标签: java scjp ocpjp


【解决方案1】:

这些要求确保equals 方法将具有人们对等价概念的期望语义,以及逻辑/数学属性。

所以,我们期望等价是传递的:如果 A 等于 B,B 等于 C,那么 A 等于 C。我们期望 对称:如果 A 等于 B,那么B 等于 A。我们期望相等是自反的:A 等于 A。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2012-03-20
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多