我有一个问题:我不知道我无法用==运算符比较两个不同的枚举。这是我的代码:

public class EnumExercises {

enum Seasons{
    SPRING, WINTER;

    Seasons() {
        System.out.println("Hello");
    }
}

enum TestResult {
    PASS, FAIL, SPRING;
}
public static void main(String[] args) {
    Seasons s = Seasons.WINTER;
    Seasons s2 = Seasons.SPRING;
    TestResult t = TestResult.PASS;
    System.out.println(s2==t);  //incompatible...why?
    System.out.println(s2.equals(t));


}}


非常感谢。

最佳答案

出于同样的原因,你不能说

String s = "1";
int t = 1;

if (s == t) {


s2t是不同的类型。它们不可比。

在后台,枚举类型会编译出它们的名称,因此除非将其强制转换为兼容的类型,否则它不会做您想要的事情。如果要执行此操作,则应使用name()toString()。参见例如this answer

if (s2.name().equals(t.name())) {


通常,对象上的==检查它们是否引用相同的内存。这似乎不是您要在此处检查的内容。您似乎正在寻找基元上的行为(如果值相等,则等于),您不会从这样的对象比较中获得这种行为。

07-27 20:43