如何比较两个相同类型对象的“状态”?

时间:2014-09-05 05:28:35

标签: java inheritance equals

我应该创建自己的equals()方法,该方法会覆盖父类的equals(方法)。此方法接受Counter对象作为其参数。在下面的代码中,我想要一种简单的方法来确定Counter对象参数是否等于Counter类的当前实例,如果这有意义的话。我通过逐个比较每个对象的字段在下面的代码中实现了这一点,但我想要一个更简单的方法来实现它。看起来像这样的东西会很好:“result =(otherCounter == new Counter(min,max)?true:false);”,但我知道这不对,它会出错。如何比较两个Counter对象中变量的相等性,如果Counter对象c1和c2不同,c1.equals(c2)将为false?

public boolean equals(Object otherObject)
{

    boolean result = true;
    if (otherObject instanceof Counter)
    {

        Counter otherCounter = (Counter)otherObject;

            result = (otherCounter.min == this.min) &&  
                    (otherCounter.max == this.max) &&
                    (otherCounter.currentCount == this.currentCount) &&
                    (otherCounter.rolloverOccurrence == this.rolloverOccurrence) ? true : false;

    }
    return result;
}

2 个答案:

答案 0 :(得分:0)

Java中无法进行运算符重载。 并且要比较两个对象是否相等你应该使用.equals()方法无论如何。 例如:obj1.equals(obj2)

这是因为有时Java API(例如:Collections)会在内部调用equals方法来对集合进行排序。所以没有简单的比较方法,但使用equals()

答案 1 :(得分:0)

你的方法就像这样很好,除了你在这里得到的其他答案,说明Java中的运算符没有超载,result = true代替false并且评论你记得如果你还没有覆盖hashCode。让我再给你一个建议。该方法可以用更紧凑的方式编写:

public boolean equals(Object obj) {
   if (!(obj instanceof Counter)) {
       return false;
   }
   Counter other = (Counter) obj;
   return other.min == this.min && other.max == this.max &&
       other.currentCount == this.currentCount &&
       other.rolloverOccurrence == this.rolloverOccurrence;
}
相关问题