簡體   English   中英

枚舉<-> JAVA中的字符串比較

[英]Enum <-> String comparison in JAVA

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

輸出為:

枚舉是否等於字符串?:否
enum.toString()是否等於字符串?:true
枚舉“ TEST1”的值和字符串“ TEST1”的值

據我所知, Enum.toString()在使用時,它被稱為隱System.println()但我不明白什么是Enum時相比使用的值equals()在第二行。 Foo.TEST1是否用作Integer或其他任何值, JAVA在內部做什么?

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

問:我想比較一個字符串與一個枚舉

枚舉提供了一個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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM