2014-12-19 137 views
1
public enum EnumEqualsMethod { 

    A,B,C 

} 


public enum EnumEqualsMethod1 { 

    A,C,D 

} 

EnumEqualsMethod a = EnumEqualsMethod.C; 
ЕnumEqualsMethod1 b= EnumEqualsMethod1.C; 

System.out.println(a.equals(b)); 

輸出爲false。爲什麼?枚舉類型中的等於方法

+0

可能重複的[比較爪哇枚舉成員:==還是equals()?(http://stackoverflow.com/questions/1750435/comparison-java-enum-members-or-equals) – Smutje 2014-12-19 11:36:21

+0

因爲那是兩個不同的對象。 – Jens 2014-12-19 11:36:31

+0

這不是因爲它們具有相同的名稱,而是與它們相等。即使它們是枚舉,它們仍然是對象。 – 2014-12-19 11:44:34

回答

5

將枚舉比較爲對象。這些是不同類別的兩個不同對象。他們爲什麼要平等? A,B,C - 只是變量的名稱。他們沒有什麼比較操作。

+0

我們不能在不同的枚舉類中使用equals方法來表示常量。 – 2014-12-19 11:38:30

+0

您應該瞭解參考,參考名稱和對象之間的區別。再次引用名稱並不意味着對象的平等。 – Mikhail 2014-12-19 11:40:29

+1

你可以使用'equals()'作爲'enum'常量,但沒有意義。它與'enum'的'=='相同。關於java enum的一個好處是它們都有自己的名字空間,所以'EnumEqualsMethod'中的'C'與'EnumEqualsMethod1'中的'C'無關。 – 2014-12-19 11:44:56

0

爲了理解爲什麼輸出是假的,你應該想到EnumEqualsMethod作爲類和A, B, C實例是類

例如,枚舉的比較是像做以下內容:

Class1 a = new Class1(); 
Class2 b = new Class2(); 

System.out.print(a.equals(b));