枚举类型比较的最佳方式

6

我有一个枚举,例如 enum Color { Red, Brown }。我还有一些相同类型的变量:

Color c1 = Brown, c2 = Red

如何与常量值进行比较:

if (c1 == Color.Brown) { 
    //is brown
}

或者

if (c1.equals(Color.Brown)) {
    //is brown
}

2
无论哪个都可以,但为了简单起见,我会选择 ==。 - Hovercraft Full Of Eels
我会选择使用.equals(...),因为它让我更开心。 :D - Moonbeam
我更喜欢把常量放在左边。这样,如果你不小心打成了“=”,编译器就会报错。Color.Brown==c1 - QuentinUK
https://dev59.com/AXI-5IYBdhLWcg3wpaF1 - Md Faraz
有兴趣的人可以查看EnumSetEnumMap类,这些类可能会对这个问题有所帮助。 - Basil Bourque
equals accepts an Object and so there is less type safety compared to == - WW.
1个回答

13

请使用==,因为在同一类装载器的上下文中不可能有多个相同的枚举常量(尽管我们可以忽略这一点),所以总是安全的。

话虽如此,使用equals()也很安全,并且也会执行引用相等性比较。这基本上是一个风格选择。

就我个人而言,我很少使用if语句来处理枚举。我更喜欢使用switch语句块。

switch (c1) {
    case Brown:
        //is brown
        break;
    case Red:
        //...
}

那段代码使我成为了一个悲伤的熊猫。D: - Moonbeam
1
@Moonbeam:为什么这样? 显然这是一个人为制造的例子,但它是原帖作者的例子,而不是我的。 - Mark Peters
3
使用“==”是因为枚举类型变量可以为null。在我看来,没有使用equals()的理由。 - Mike Q

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接