はじめに
論理演算子で「ムムム!」と思うことがあったので、自分の再確認としてのメモです。
知っている人にとっては、当たり前でしょと思う内容だと思います。
短絡評価
論理演算子(&&,||)では最初の結果だけを評価して、残りは評価しないことがある。
.java
1. true && true → true
2. true && false → false
3. false && true → false
4. false && false → false
3と4では、左側がFalseなので、右側の評価は何であれ、Falseとなる。
||も同じことが言える。
.java
1. true || true → true
2. true || false → true
3. false || true → true
4. false || false → false
1と2では、左側がTrueなので、右側の評価は何であれ、Trueとなる。
このように左側の評価だけで、全体の評価が決まる時、右側の評価を見ないことを短絡評価と言う。
演算子が複数種類ある場合の評価
先ほどは、&&だけ、||だけと分けて考えたが、&&と||が両方ある時の評価はどうなるだろうか?
.java
0. A && B || C
1. false && true || true → true
2. true && false || true → true
3. false && false || true → true
4. true && true || true → true
5. false && true || false → false
6. true && false || false → false
7. true && true || false → true
8. false && false || false → false
4と7のように、A && B
がTrueであれば、Cの評価が何であれ、全体の評価はTrueになる。
A && B
がFalseであれば、Cの評価によって全体の評価が決まる。
冷静に考えれば当然のことだが、私はAの評価だけを見て、全体の評価が決まると勘違いしていた。
.java
0. A && B || C
1. false || true && true → true
2. true || false && true → true
3. false || false && true → false
4. true || true && true → true
5. false || true && false → false
6. true || false && false → true
7. true || true && false → true
8. false || false && false → false
先程の例の&&
と||
を入れ替えてみた。
結果が異なるのは、3と6である。
ご存じではあると思うが、||より&&の方が評価する優先順位が高い。