参数为object类型时的equals方法

时间:2014-04-03 09:15:40

标签: java

我正在学习Java,并且在使用转换/多态概念方面遇到了一些麻烦。

如果我有以下方法:

public boolean equals(Object x);

其中x可以引用Y类对象;

查看x是否等于y(引用Y类obj的变量)的最佳方法是什么?我理解向下倾斜(Y)x不好?

3 个答案:

答案 0 :(得分:3)

向下倾斜是Object.equals中的常态。在向下转发之前,请检查x确实是x instanceof Y的合规对象;为了确保equals的对称性,有时需要支票x.getClass() == this.getClass()

如果x不是您班级的实例,则会立即返回false

答案 1 :(得分:1)

如果您首先执行以下检查,那么向下倾斜也不错:

  1. 检查null - > x != null
  2. 在运行时比较类 - > getClass().equals(x.getClass())
  3. 然后,您可以将x作为this的等级,并进行特定的比较。

    null检查之前,您可能还想比较thisx的引用。

    如果引用相同,则不需要执行任何其他比较。

答案 2 :(得分:0)

这在很大程度上取决于你对平等的解释。这就是为什么可以覆盖equals运算符的原因。

只需执行x.equals(y)并通过覆盖equals方法来解释相等性。

一种模板方法是:

public boolean equals(Object x) {
  if (this == x)
    return true;
  if (x == null || this.getClass() != x.getClass())
    return false;
  // Compare attributes as needed here
}

当然,如果有可能x != null,您应该先检查null