Enum没有初始化正确的值

时间:2015-11-27 16:42:17

标签: java enums

我目前正在使用下面的枚举。

public enum ConditionCode  {
    EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL
}

我想获取枚举ConditionCode.ALS并将其打印并通过执行此操作与AL进行比较

public static void main(String[] args)  {
    ConditionCode sal = ConditionCode.SAL;
    System.out.print(sal.toString + " ");
    System.out.println(sal.compareTo(ConditionCode.AL) == 0);
}

我觉得奇怪的是,此命令打印AL而不是SAL false,并且对于所有其他枚举,例如

public static void main(String[] args)  {
    ConditionCode cc = ConditionCode.CC;
    System.out.print(cc.toString + " ");
    System.out.println(cc.compareTo(ConditionCode.AL) == 0);
}

还会打印AL而非CC false。我能知道为什么会这样吗?而且,我该如何解决?

1 个答案:

答案 0 :(得分:2)

此程序http://ideone.com/uXiIj8按预期打印

public static void main (String[] args) throws java.lang.Exception
{
    {
        ConditionCode sal = ConditionCode.SAL;
        System.out.print(sal + " ");
        System.out.println(sal.compareTo(ConditionCode.AL) == 0);
    }
    {
        ConditionCode sal = ConditionCode.CC;
        System.out.print(sal + " ");
        System.out.println(sal.compareTo(ConditionCode.AL) == 0);
    }
}

public enum ConditionCode  {
   EQ, SEQ, NE, SNE, CS, SCS, HS, SHS, CC, SCC, LO, SLO, MI, SMI, PL, SPL, VS, SVS, VC, 
    SVC, HI, SHI, LS, SLS,GE, SGE, LT, SLT, GT, SGT, LE, SLE, SAL, AL
}

打印

SAL false
CC false
  

我能知道为什么会这样吗?而且,我该如何解决?

您很可能在运行代码之前更改代码并重新编译程序,或者您正在运行与您认为的程序不同的程序。我会确保你的IDE设置正确,以便在运行它之前重新编译你的程序,如果它看起来很好的话可能会重新启动它。