比较Java枚举成员:==或equals()?

比较Java枚举成员:==或equals()?

我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类。当比较给定枚举的两个成员时,我总是使用.equals(),例如

public useEnums(SomeEnum a){
    if(a.equals(SomeEnum.SOME_ENUM_VALUE))
    {
        ...
    }
    ...}

但是,我刚刚遇到一些使用equals运算符==而不是.equals()的代码:

public useEnums2(SomeEnum a){
    if(a == SomeEnum.SOME_ENUM_VALUE)
    {
        ...
    }
    ...}

我应该使用哪个运营商?


翻阅古今
浏览 1028回答 3
3回答

达令说

两者在技术上都是正确的。如果你查看源代码.equals(),它只是按照==。==但是,我使用它,因为它将是null安全的。

至尊宝的传说

使用==比较两个枚举值的作品,因为只有一个每个枚举常量对象。另外,==如果您这样编写,则实际上不需要使用写入null安全代码equals():public useEnums(SomeEnum a){     if(SomeEnum.SOME_ENUM_VALUE.equals(a))     {         ...     }     ...}这是一种称为“ 从左边比较常数”的最佳实践,你绝对应该遵循。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java