我有任何枚举,我已经定义了一些常量
public enum MyEnum{
MY_CONSTANT1,
MY_CONSTANT2
}
现在我将以下列方式将字符串与其中一个枚举常量进行比较 -
String myVariable ="MY_CONSTANT1";
System. out.println(MyEnum.MY_CONSTANT1.toString().equals(myVariable));
以上返回true,这是可以理解的。
现在当我做以下----
String myVariable ="MY_CONSTANT1";
System.out.println(MyEnum.MY_CONSTANT1.equals(myVariable));
上面的代码返回false。为什么会这样?
答案 0 :(得分:2)
Here's枚举equals()
方法的javadoc,这就是它所说的:
public final boolean equals(Object other)
如果指定的对象等于此枚举常量,则返回true。
现在,如果我们查看equals()
的{{3}},就会这样做:
public final boolean More ...equals(Object other) {
return this==other;
}
正如我们所看到的,它只是检查两个引用是否指向同一个对象。由于有问题的两个引用不同,它返回false
。
答案 1 :(得分:1)
好吧,在第一次比较中,你调用了Enum类型的toString方法,它默认返回枚举的名称:
System.out.println(MyEnum.MY_CONSTANT1.toString().equals(myVariable));
所以,MyEnum.MY_CONSTANT1.toString()是" MY_CONSTANT1"。然后" MY_CONSTANT1"等于" MY_CONSTANT1",这是真的。
另一方面,第二个比较是在Enum类型和String类型之间。 Enum equals函数执行以下代码:
public final boolean equals(Object other) {
return this==other;
}
所以,它不相等,因为其他是字符串而这个是枚举。< / p>