为什么 (布尔值 ^ int > 0) 有效?
当您尝试执行类似操作时:
if (true ^ 1) {
//do something
}
编译器合理地说,运算符不是为参数类型布尔值和 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
任何人都可以解释一下引擎盖下发生了什么吗?