我有一个问题:我不知道我无法用==运算符比较两个不同的枚举。这是我的代码:
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) {
s2
和t
是不同的类型。它们不可比。在后台,枚举类型会编译出它们的名称,因此除非将其强制转换为兼容的类型,否则它不会做您想要的事情。如果要执行此操作,则应使用
name()
或toString()
。参见例如this answer。if (s2.name().equals(t.name())) {
通常,对象上的
==
检查它们是否引用相同的内存。这似乎不是您要在此处检查的内容。您似乎正在寻找基元上的行为(如果值相等,则等于),您不会从这样的对象比较中获得这种行为。