Equals使用String对象进行比较的assertEquals方法

时间:2014-04-14 12:37:20

标签: java string junit override equals

我想覆盖equals方法,所以我可以比较两个变量对象,如果它们相等,就像一个具有String" abc"作为变量,另一个对象也有String" abc"作为变量。我需要这个类来管理和解析表达式。

所以我想做一个测试类测试,变量对象是相等的。我想像那样覆盖它。

@Override
public boolean equals(Object obj) {
    return this.variable.equals(((Variable) obj).getVariable());
}

现在我的问题是我不太确定这是否会在以后工作,因为我在这里使用equals-method,我之前用它来比较字符串。但是,由于我覆盖它,这并不意味着我现在使用相同的方法吗?或者是使用比较字符串的equals方法的变量字符串?如果那不起作用,我还应该做什么来比较覆盖的equals方法中的String?

1 个答案:

答案 0 :(得分:3)

正如@JBNizet所说,如果ClassCastException不是正确的类型,那么截至目前,您的方法可能会抛出obj。你应该先解决这个问题:

@Override
public boolean equals(Object obj) {
    if (!obj instanceof Variable) {
        return false;
    }
    return this.variable.equals(((Variable) obj).getVariable());
}

话虽这么说,新定义的equals适用于Variable个对象,不适用于字符串。 这就是为什么您在此方法中对equals()的调用仍然有效,如果这是您的问题,因为它引用了String.equals(),因为您的{{ 1}}字段是variable(我猜到了),而不是String

此外,Variable只有当您的equals字段相同时才认为Variable个对象相等,才应该以这种方式覆盖。