2014-09-05 105 views
0

我应该创建自己的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; 
} 
+6

您应该将'result'初始化为'false',因为如果它不是对象的实例,那么它就不相等。我会说你目前的实现很好,当然,这是很长时间的啰嗦,因为这是你得到的最好结果 – MadProgrammer 2014-09-05 05:30:26

+0

不是问题的一部分,但是当你重写equals时不要忘记重写hashCode ... – shlomi33 2014-09-05 05:57:48

回答

0

运算符重载在Java中是不可能的。 而要比较两个对象是否相等,您应该使用.equals()方法。 例如:obj1.equals(obj2)

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

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; 
}