比较正在返回false
,因为您正在将String
实例与Enum
实例进行比较。
@RohitJain 已经很好地解释了为什么在他的回答toString()
中的比较中没有调用该方法,以及如果你想做的话应该如何使用它。
但是,toString()
不应将其用于比较目的,仅应将其覆盖以提供对象的自定义字符串表示。
如果您这样做,您可以比较您真正感兴趣的属性:
String teststring = "1A".
Sysout(teststring.equals(Test.LETTER.getValue())); // Will return true
当然,您应该为value
属性提供一个 getter,或者让它对进行比较的操作可见。
您也可以像这样编写一个isEqual()
方法enum
:
enum Test {
LETTER("1A");
private String value;
private Test(String value) {
this.value = value;
}
@Override
public String toString() {
return value;
}
public boolean isEqual(String value) {
return this.value.equals(value);
}
}
只是Test.LETTER.isEqual(teststring)
做这个比较。
甚至是static getByValue(String value)
获取给定枚举实例的方法value
:
enum Test {
...
public static Test getByValue(String val) {
for (Test c : values()) {
if (c.value.equals(val)) {
return c;
}
}
}
}
Test x = Test.getByValue("1A"); // x == Test.LETTER