如何将对象类型和值进行比较

时间:2013-09-08 19:53:42

标签: java equals

我在这里发布了一大堆有问题的代码。我试图同时比较两种对象类型及其值。

    public boolean equals(Object val1)
{

    if (!(val1 instanceof ParentClass))

    return false;

    ParentClass val2 = (ParentClass) val1;

    if ((val1.getClass().equals(val2.getClass())) && val1.getVal().equals(val2.getVal()));
    System.out.println("Both objects belong to same class  and the values are equal too!!");

    return true;

}

我在父类中有这个块,我在上面的IF条件中遇到错误(方法getVal()未定义类型Object)。能否请你给我一个解决方案,以便我可以一次比较对象类型和值。 实际上ParentClass是我的父,我有几个派生类,我使用Object的equals方法来比较基类和派生对象的类型。 另外我如何使用Object的hashCode验证我的等号? 请让我知道你的建议。 谢谢!

1 个答案:

答案 0 :(得分:1)

看看你的比较:

if ((val1.getClass().equals(val2.getClass())) && val1.getVal().equals(val2.getVal()));

这是比较val1val2 - 但鉴于前一行,这些是相同的参考!您希望将thisval2进行比较。例如:

if (this.getClass().equals(val2.getClass()) && this.getVal().equals(val2.getVal()))

(这里不需要明确的this.部分,但为了清楚起见,我已将其包括在内。)

另请注意,由于构造/缓存Class<>对象的方式,您只需检查引用相等性:

if (this.getClass() == val2.getClass() && this.getVal().equals(val2.getVal()))