2014-09-05 106 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; 
}