作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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/
我是一名优秀的程序员,十分优秀!