枚举JAVA中的字符串比较

枚举JAVA中的字符串比较,java,string,enums,compare,Java,String,Enums,Compare,我想比较字符串和枚举。我知道如何正确地进行比较,但我不明白确切的原因。下面的示例显示了我的问题: 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?: " + likeEnu

我想比较字符串和枚举。我知道如何正确地进行比较,但我不明白确切的原因。下面的示例显示了我的问题:

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+"'");
输出为:

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

我知道在System.println中使用Enum.toString时,它被称为隐式的,但我不知道与第二行中的相等项相比,Enum使用什么作为值。Foo.TEST1用作Integer还是其他任何东西,JAVA在内部做什么?

该方法首先检查传递的参数是否是String的实例。下面是一段源代码:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        // Code [...]
    }
    return false;
}
由于Foo.TEST1不是String的实例,因此它返回false

我想比较一个字符串和一个枚举

提供了一个方法。您需要使用它来比较枚举对象和字符串,因为equals方法检查参数是否为字符串实例。既然不是,它就会返回false

这可以从下面的例子中看出


谢谢你的解释,现在我明白了我的情况下的平等方法
likeEnumTest1.equals(Foo.TEST1.name())
public boolean equals(Object anObject) { // It takes an object and even enum is an object, thus it doesn't call the `toString()` method.
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}