java - JAVA中的枚举<->字符串比较

标签 java string enums compare

我想将StringEnum 进行比较。我知道如何正确进行比较,但我不明白为什么。我的以下示例显示了我的问题:

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+"'");

输出为:

Is enum equal string?: false
Is enum.toString() equal string?: true
Value of enum 'TEST1' and value of string '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

关于java - JAVA中的枚举<->字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22322089/

相关文章:

java - 内部类中的非最终变量

java - 程序采用非空子级并对其进行操作

java - jdbcTemplate classCastException 在 Mockito.when thenReturn 期​​间

java - 多个 if 语句输出不正确

java - JDBC 连接 PostgreSQL

javascript - 正则表达式

wpf - FrameworkElement.Name问题

java - 格式化字符串: To remove the telephone number

swift - 访问常量类中的枚举时,Swift 中出现编译错误

Java:如何在枚举中使用构造函数重载?