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
。为什么?枚举类型中的等于方法
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
。为什么?枚举类型中的等于方法
将枚举比较为对象。这些是不同类别的两个不同对象。他们为什么要平等? A,B,C - 只是变量的名称。他们没有什么比较操作。
我们不能在不同的枚举类中使用equals方法来表示常量。 – 2014-12-19 11:38:30
您应该了解参考,参考名称和对象之间的区别。再次引用名称并不意味着对象的平等。 – Mikhail 2014-12-19 11:40:29
你可以使用'equals()'作为'enum'常量,但没有意义。它与'enum'的'=='相同。关于java enum的一个好处是它们都有自己的名字空间,所以'EnumEqualsMethod'中的'C'与'EnumEqualsMethod1'中的'C'无关。 – 2014-12-19 11:44:56
为了理解为什么输出是假的,你应该想到EnumEqualsMethod
作为类和A, B, C
为实例是类。
例如,枚举的比较是像做以下内容:
Class1 a = new Class1();
Class2 b = new Class2();
System.out.print(a.equals(b));
可能重复的[比较爪哇枚举成员:==还是equals()?(http://stackoverflow.com/questions/1750435/comparison-java-enum-members-or-equals) – Smutje 2014-12-19 11:36:21
因为那是两个不同的对象。 – Jens 2014-12-19 11:36:31
这不是因为它们具有相同的名称,而是与它们相等。即使它们是枚举,它们仍然是对象。 – 2014-12-19 11:44:34