Когда вы пытаетесь сделать что-то вроде этого:
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
Действуйте как действительный логический XOR:
| ^
-----+--
F F | F
F T | T
T F | T
T T | F
Может кто-нибудь объяснить, что происходит под капотом?