非短絡論理演算子について
普段、自分がよく使う論理演算子は「&&」,「||」 や「!」ですが、論理演算子には他にも非短絡論理演算子「&」,「|」があります。
ふと、あまり見慣れていない「&」,「|」が使われたコードを見ると、どういう動きをするんだっけと考えてしまうのは自分だけでしょうか。
気になったので、適当なサンプルを書いて確認してしまいました。
public class Sample { public static void main(String[] args){ System.out.println("-- 論理積:& --"); System.out.println("true & true ⇒ " + (true & true)); System.out.println("true & false ⇒ " + (true & false)); System.out.println("false & true ⇒ " + (false & true)); System.out.println("false & false ⇒ " + (false & false)); System.out.println(); System.out.println("-- 論理和:| --"); System.out.println("true | true ⇒ " + (true | true)); System.out.println("true | false ⇒ " + (true | false)); System.out.println("false | true ⇒ " + (false | true)); System.out.println("false | false ⇒ " + (false | false)); System.out.println(); System.out.println("-- 排他的論理輪:^ --"); System.out.println("true^true ⇒ " + (true^true)); System.out.println("true^false ⇒ " + (true^false)); System.out.println("false^true ⇒ " + (false^true)); System.out.println("false^false ⇒ " + (false^false)); System.out.println(); System.out.println("-- 論理積:&& --"); System.out.println("true && true ⇒ " + (true && true)); System.out.println("true && false ⇒ " + (true && false)); System.out.println("false && true ⇒ " + (false && true)); System.out.println("false && false ⇒ " + (false && false)); System.out.println(); System.out.println("-- 論理和:|| --"); System.out.println("true || true ⇒ " + (true || true)); System.out.println("true || false ⇒ " + (true || false)); System.out.println("false || true ⇒ " + (false || true)); System.out.println("false || false ⇒ " + (false || false)); System.out.println(); System.out.println("-- 否定:! --"); System.out.println("!true ⇒ " + (!true)); System.out.println("!false ⇒ " + (!false)); } }
実行結果
-- 論理積:& -- true & true ⇒ true true & false ⇒ false false & true ⇒ false false & false ⇒ false -- 論理和:| -- true | true ⇒ true true | false ⇒ true false | true ⇒ true false | false ⇒ false -- 排他的論理輪:^ -- true^true ⇒ false true^false ⇒ true false^true ⇒ true false^false ⇒ false -- 論理積:&& -- true && true ⇒ true true && false ⇒ false false && true ⇒ false false && false ⇒ false -- 論理和:|| -- true || true ⇒ true true || false ⇒ true false || true ⇒ true false || false ⇒ false -- 否定:! -- !true ⇒ false !false ⇒ true
予想通りの動きだったので、安心しました。。。
「&&」,「||」は左側のオペランドの評価結果で論理式の条件を満たすことが判断できる場合、右側のオペランドは評価しませんが、「&」,「|」は左側のオペランドの評価結果に関係なく両側のオペランドを評価します。左側のオペランドの評価で結果が決まっているのに右側のオペランドを必ず評価するのは、とっても非効率ですよね。
だから一般的には短絡論理演算子「&&」,「||」が使われるのですね。
すっきりした〜!!