枚举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;
}