「論理演算」はbooleanの値同士を計算する方法です。「論理演算子」は、そのための記号です。
以下、論理演算子を示します。
演算子 | 使い方 | 名前 | 計算内容 |
---|---|---|---|
& | a & b | AND(論理積) | aもbもtrueならtrue、違うならfalse |
| | a | b | OR(論理和) | aかbがtrueならtrue、違うならfalse |
^ | a ^ b | XOR(排他的論理和) | aかbの一方のみがtrueならtrue、違うならfalse |
! | !a | NOT(否定) | aがfalseならtrue、trueならfalse |
以下、使い方の例です。
int a = 3; boolean b = (0 < a) & (a <= 10); ↓ true & true ↓ &の左右が両方ともtrueなので 計算結果はtrue ↓ 変数bにtrueの値が入る
int a = 3; boolean b = (0 < a) & (a <= 10); System.out.println(b); // 「true」と出力
boolean a = true; boolean b = ! a; ↓ ! true ↓ !の右側がtrueなので 計算結果はfalse ↓ 変数bにfalseの値が入る
boolean a = true; boolean b = ! a; System.out.println(b); // 「false」と出力
論理演算子の中には、「ショートサーキット演算子(短絡演算子)」と呼ばれる特殊な演算子があります。
ショートサーキット演算子は、以下の2つです。
演算子 | 使い方 | 計算内容 |
---|---|---|
&& | a && b | aもbもtrueならtrue、違うならfalse ただしaがfalseならbは評価しない |
|| | a || b | aかbがtrueならtrue、違うならfalse ただしaがtrueならbは評価しない |
&演算、|演算では、左辺が決まれば、結果が自動的に決まる場合があります。ショートサーキット演算子では、その際に右辺の評価を行いません。
そうすることで、不要な計算を行わないようにして無駄な処理を省きます。
まずは、&演算の場合です。&演算では、左辺がfalseの場合は、右辺が何であれ結果がfalseになります。
ショートサーキット演算子「&&」では、こういった場合に、右辺を評価しません。以下、その例を示します。
int a = -1; boolean b = (0 < a) && (a <= 10); ↓ false && (a <= 10); ↓ &&の左がfalseなので右を判定せず 計算結果はfalse ↓ 変数bにfalseの値が入る
int a = -1; boolean b = (0 < a) && (a <= 10); System.out.println(b); // 「false」と出力
次は、|演算の場合です。|演算では、左辺がtrueの場合は、右辺が何であれ、結果がtrueになります。
ショートサーキット演算子「||」では、こういった場合に、右辺を評価しません。以下、その例を示します。
int a = -1; boolean b = (a < 0) || (a <= 10); ↓ true || (a <= 10); ↓ ||の左がtrueなので右を判定せず 計算結果はtrue ↓ 変数bにtrueの値が入る
int a = -1; boolean b = (a < 0) || (a <= 10); System.out.println(b); // 「true」と出力