枚举equals()和==
这个问题在这里已经有了答案:
==
应该对枚举工作正常,因为没有给定枚举项的多个引用; 只有一个。 关于枚举类型的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 == d2
和d1.equals(d2)
因为它们引用相同的常量值,即Drill.ATTENTION
。
上一篇: Enum equals() and ==