Как указано в Спецификации языка Java :
Результат! = Равен false, если оба операнда имеют значение true или оба false;в противном случае результат верен.Таким образом! = Ведет себя так же, как ^ (§15.22.2) при применении к булевым операндам.
Кроме того, если вы попытаетесь просмотреть байт-код простого фрагмента:
void test(boolean b1, boolean b2) {
boolean res1 = b1^b2;
boolean res2 = b1!=b2;
}
вы получаете:
test(ZZ)V
L0
LINENUMBER 45 L0
ILOAD 1
ILOAD 2
IXOR
ISTORE 3
L1
LINENUMBER 46 L1
ILOAD 1
ILOAD 2
IXOR
ISTORE 4
L2
LINENUMBER 47 L2
RETURN
L3
Это гарантирует, что, в дополнение к той же семантике, нет никакой реальной практической разницы в реализации.(вы также можете видеть, что внутренние целые используются для хранения логических значений)