枚举等于()和==

use*_*572 6 java enums

enum Drill{
        ATTENTION("Attention!"), AT_EASE("At Ease");    
        private String str; 
        private Drill(String str){
            this.str = str;
        }
        public String toString(){
            return str;
        }
    }
public class EnumExample {
    public static void main(String[] args) {
            Drill d1= Drill.valueOf("ATTENTION");
            Drill d2= Drill.valueOf("ATTENTION");
            **System.out.println(d1.equals(d2));//TRUE
            System.out.println(d1==d2);//TRUE**
            System.out.println(Drill.ATTENTION.equals(Drill.valueOf("ATTENTION")));
            System.out.println(Drill.ATTENTION.equals(Drill.AT_EASE));//FALSE 
            System.out.println(Drill.ATTENTION==Drill.valueOf("ATTENTION"));//TRUE
            System.out.println(Drill.ATTENTION==Drill.AT_EASE);//FALSE
}
}
Run Code Online (Sandbox Code Playgroud)

使用==和equals()时的枚举行为似乎相同.根据我的知识,==只是检查参考.因此d1 == d2应为FALSE.任何人都可以解释这种行为为什么是真的?

Hov*_*els 5

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