Java 比较枚举器(奇怪的行为)

标签 java eclipse enums

我使用 Java 项目和 Eclipse(版本 3.6.2)作为 IDE,在枚举比较中我得到了一个奇怪的行为,下面是一个奇怪的例子:

全局变量:

StatusType status = StatusType.SIGNATURE;

                     

代码:

                String trsStatus = "END";
            if(trsStatus.equals("END") && (this.status.compareTo(StatusType.SIGNATURE) != 0)){
                //Do something
                }

此比较成功并进入 if block ,为什么?在这种情况下,if 语句的第二次评估(this.status.compareTo(StatusType.SIGNATURE)!= 0)失败,因为结果为假!为什么java却进入了 block ???

如果我在 eclipse 调试器的表达式观察器上评估表达式,语句的值是:

trsStatus.equals("END") ---> true

(this.status.compareTo(StatusType.SIGNATURE) != 0) ---> false

我做了另一个测试,如果我将 if 语句中第二个表达式的结果分配给一个 boolean 变量:

boolean sign = (this.status.compareTo(StatusType.SIGNATURE) != 0);

我得到这个结果:

(this.status.compareTo(StatusType.SIGNATURE) != 0) ---> false

sign ---> true

为什么?!?

这怎么可能?

最佳答案

会不会是 StatusType 以某种奇怪的方式覆盖了 compareTo()

是否有任何其他线程可以更改 status 字段的值?

在任何情况下,您都应该在这里使用 equals() 甚至 == 而不是 compareTo()

关于Java 比较枚举器(奇怪的行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359941/

相关文章:

java - 为什么我们需要在数据源中提供密码?

java - 无法从 START_OBJECT token 中读取 JSON : Can not deserialize instance of hello. Country[]

android - 使Google Api level 10项目在android 2.3.4/6上运行

android 网页链接的两个按钮

c++ - 尝试在 C++ 中使用枚举制作剪刀石头布程序

python - 如何操作 Google Ads API 的 Enum 类的对象 - python

java - 如何逐 block 读取 int[]

java - freepastry教程3错误: Cannot join ring.所有 Bootstrap 都有故障

Java结合了两个大型继承链的父级

java - 如何从方法设置枚举属性的值?