【发布时间】:2017-06-10 19:31:12
【问题描述】:
当你尝试做这样的事情时:
if (true ^ 1) {
//do something
}
编译器有理由说运算符^ 没有为参数类型boolean 和int 定义。
但是如果你这样使用它:
if (true ^ 1 > 0) {
//do something
}
代码可以编译(至少对于 Java 8)并且可以完美运行。 基本上这些操作:
false ^ -1 > 0
false ^ 1 > 0
true ^ -1 > 0
true ^ 1 > 0
表现得像一个有效的逻辑异或:
| ^
-----+--
F F | F
F T | T
T F | T
T T | F
谁能解释一下幕后发生了什么?
【问题讨论】:
-
我建议你了解operator precedence。
-
@Someprogrammerdude 公平地说,按位运算符的优先级低于比较运算符的优先级这一事实是这种情况下语言运算符优先级的一个特别不直观的方面。
-
这就是你需要了解它的原因,@random :-)