[英]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.