>java中的字符串比较

rqmkfv5c  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(326)

我想比较一下 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+"'");

输出为:
枚举是否等于字符串?:false
enum.tostring()是否等于字符串?:true
枚举“test1”的值和字符串“test1”的值
我明白 Enum.toString() 在中使用时称为隐式 System.println() 但我不明白 Enum 与比较时用作值 equals() 在第二行。是 Foo.TEST1 用作 Integer 或者别的什么,有什么用 JAVA 你在内部做什么?

nukf8bse

nukf8bse1#

问。我想比较一个字符串和一个枚举
枚举提供 name() 方法。你需要用它来比较 enum 带有 String 因为 equals() 方法检查参数是否为 String 示例与否。既然不是,它就会回来 false .

likeEnumTest1.equals(Foo.TEST1.name())

这可以从string类的equals()的源代码中看出

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;
}
0tdrvxhp

0tdrvxhp2#

这个 String#equals(Object) 方法首先检查传递的参数是否是的示例 String 不管怎样。以下是源代码片段:

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

Foo.TEST1 不是的示例 String ,它返回 false .

相关问题