2014-12-19 111 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));