当你尝试做这样的事情时:
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
谁能解释一下幕后发生了什么?
最佳答案
很简单:>
有更高的 precedence比^
,所以
if (true ^ 1 > 0) {
等价于
if (true ^ (1 > 0)) {
相当于
if (true ^ true)
...这只是逻辑异或。
我永远不会编写这样的代码,请注意。看到一个无法以不同方式更清楚地编写的示例,我会感到惊讶。
关于java - 为什么 (boolean ^ int > 0) 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41854640/