【发布时间】:2010-12-17 13:13:46
【问题描述】:
我知道 Java 枚举被编译为具有私有构造函数和一堆公共静态成员的类。在比较给定枚举的两个成员时,我一直使用.equals(),例如
public useEnums(SomeEnum a)
{
if(a.equals(SomeEnum.SOME_ENUM_VALUE))
{
...
}
...
}
但是,我刚刚遇到了一些使用等号运算符 == 而不是 .equals() 的代码:
public useEnums2(SomeEnum a)
{
if(a == SomeEnum.SOME_ENUM_VALUE)
{
...
}
...
}
我应该使用哪个运算符?
【问题讨论】:
-
我刚刚偶然发现了一个非常相似的问题:stackoverflow.com/questions/533922/…
-
令我惊讶的是,在所有答案中(尤其是来自 polygenelubricants 的答案,它详细解释了 == 的工作原理)没有提到 == 的另一大好处:它明确说明了枚举的方式工作(作为一组固定的单例对象)。使用 equals 时,人们会认为同一枚举“替代”的多个实例可能会以某种方式浮动。