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