当你尝试做这样的事情:
if (true ^ 1) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
编译器合理地说,^没有为参数类型boolean和int定义运算符.但如果你像这样使用它:
if (true ^ 1 > 0) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
代码编译(至少Java 8)并且完美无缺.基本上这些操作:
false ^ -1 > 0
false ^ 1 > 0
true ^ -1 > 0
true ^ 1 > 0
Run Code Online (Sandbox Code Playgroud)
表现得像一个有效的逻辑异或:
| ^
-----+--
F F | F
F T | T
T F | T
T T | F
Run Code Online (Sandbox Code Playgroud)
请问有什么人可以解释引擎盖下发生的事情吗?
Jon*_*eet 78
原因很简单:>具有较高的优先级比^,所以
if (true ^ 1 > 0) {
Run Code Online (Sandbox Code Playgroud)
相当于
if (true ^ (1 > 0)) {
Run Code Online (Sandbox Code Playgroud)
这相当于
if (true ^ true)
Run Code Online (Sandbox Code Playgroud)
......这只是逻辑XOR.
我不会写这样的代码,请注意.我会惊讶地发现一个无法以不同方式更清楚地写出的例子.