Enum < - > JAVA中的字符串比较

ale*_*lex 0 java string enums compare

我想比较一个String带有Enum.我知道如何正确地进行比较,但我不明白为什么.我的以下示例显示了我的问题:

enum Foo{
    TEST1
}

String likeEnumTest1 = "TEST1";
System.out.println("Is enum equal string?: " + likeEnumTest1.equals(Foo.TEST1));
System.out.println("Is enum.toString() equal string?: " + likeEnumTest1.equals(Foo.TEST1.toString()));
System.out.println("Value of enum '" + Foo.TEST1 + "' and value of string '" + likeEnumTest1+"'");
Run Code Online (Sandbox Code Playgroud)

输出是:

枚举是否等于字符串?:false
是enum.toString()等于字符串?:true
枚举'TEST1'的值和字符串'TEST1'的值

我明白Enum.toString()在使用它时会被称为隐式System.println(),但我不明白Enumequals()第二行相比,它的用途是什么.被Foo.TEST1用作Integer或其他什么,JAVA内部做什么?

Roh*_*ain 8

String#equals(Object)方法首先检查传递的参数是否是实例String.这是源代码的片段:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        // Code [...]
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

由于Foo.TEST1它不是实例String,因此返回false.