java - 为什么两个枚举与 == 运算符不兼容?

标签 java enums comparison

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

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())) {

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

关于java - 为什么两个枚举与 == 运算符不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53023427/

相关文章:

class - 在 Dart 中,如何确定两个实例是否具有相同的类型?

java - Spring @autowired

java - 如何分割字符串只得到特定值

java - 通过枚举实现的单例在模块化趋势中仍然值得(即 Java 9+ 模块化和 Jigsaw 项目)

c# - 传入的值必须是枚举基类或枚举的底层类型,例如 Int32.Parameter name : value

mysql - 如何向 MySQL 中的 ENUM 类型列添加更多成员?

java - 如何编写比较多个参数的比较器?

java - 自定义 Java Swing GUI 与 Netbeans 拖放编辑器

带有 000webhost 的 Java mySQL

algorithm - 比较两个英文字符串的相似性