将枚举常量与没有valueOf或toString的字符串进行比较?

时间:2017-05-09 11:32:58

标签: java enums

我有任何枚举,我已经定义了一些常量

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。为什么会这样?

2 个答案:

答案 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>