枚举equals()和==

这个问题在这里已经有了答案:

  • 比较Java枚举成员:==或equals()? 15个答案

  • ==应该对枚举工作正常,因为没有给定枚举项的多个引用; 只有一个。 关于枚举类型的Java语言规范部分,8.9声明它们是隐式静态和最终的,因此只能创建一次。


    您正在比较枚举常量 。 这意味着对于每个枚举常量,都会创建一个实例。

    这个

    enum Drill{
        ATTENTION("Attention!"), AT_EASE("At Ease"); 
        ...
    }
    

    或多或少相当于

    final class Drill {
        public static final Drill ATTENTION = new Drill("Attention!") {};
        public static final Drill AT_EASE = new Drill("At Ease") {};
        ...
    }
    

    valueOf方法

    /**
    * Returns the enum constant of this type with the specified
    * name.
    * The string must match exactly an identifier used to declare
    * an enum constant in this type.  (Extraneous whitespace 
    * characters are not permitted.)
    * 
    * @return the enum constant with the specified name
    * @throws IllegalArgumentException if this enum type has no
    * constant with the specified name
    */
    public static E valueOf(String name);
    

    返回名称与指定的String值相等的变量引用的实例的值。

    所以

    Drill.valueOf("ATTENTION") == Drill.ATTENTION
    

    用于每次使用该String值调用valueOf


    文档中的Enum Types

    枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。 该变量必须等于为其预定义的值之一。 常见的例子包括指南针方向(NORTH,SOUTH,EAST和WEST的值)和一周的日子。

    由于它们是常量,枚举类型的字段的名称是大写字母。

    Drill d1= Drill.valueOf("ATTENTION"); // ATTENTION
    Drill d2= Drill.valueOf("ATTENTION"); // ATTENTION
    

    所以d1 == d2d1.equals(d2)因为它们引用相同的常量值,即Drill.ATTENTION

    链接地址: http://www.djcxy.com/p/91827.html

    上一篇: Enum equals() and ==

    下一篇: The best way to compare enums