初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
論理演算子とは
関係演算子が一つの条件に対してtrue falseを返すのに対して
論理演算子は複数の条件を評価したいときに使います
では、ここで論理演算子を紹介します
論理演算子 論理積(&&)
真偽値同士の掛け算と考えると理解しやすい演算子です。
この演算子は2つの条件がtrueのときtrueが返されます。
たとえば
int a = 1, b = 2, c = 3; を参考に考えて見ます。(a < b) && (b < c) これの出力結果は trueになります。
つまりここでは (a < b) (b < c)の2つの条件式があります。この2つの条件式が正しければ trueになるということです。
仮に(a < b) がtrueでも、(c < b)のようにfalseになればこの結果はfalseになります。
では、サンプルプログラムを見ていきます。サンプルプログラム(Sample22.java)
class Sample22{ public static void main(String args[]){
int a = 1,b = 2, c = 3; System.out.println("a = 1,b = 2, c = 3"); System.out.println("(a < b) && (b < c) = " + ((a < b) && (b< c))); System.out.println("(a < b) && (c < b) = " + ((a < b) && (c < b))); } }
プログラムをコピーする場合すべて選択をクリックしてください。
コンパイル・実行してみます。実行結果を見れば分かると思います
2つの条件式がtrueである (a < b) && (b < c) だけが結果trueです。
しかし、この論理演算子で重要なことがあります。
上記サンプルプログラムを参考に説明しますが、※(a < b) && (b < c) で (a < b)がその時点でfalse だったとします。
そのとき(b < c)の評価に関わらず全体の評価がfalseになります。したがって(b < c)は
評価されません。
ビット演算子(&)を使います
上記プログラムを (a < b) & (b < c)に変更してやれば必ず全てを評価してくれます以下のプログラムで違いを確認したいと思います
サンプルプログラム(Sample22_1.java)
class Sample22_1{ public static void main(String args[]){ int x = 10,y = 20,z = 30; boolean b1 = (x < y) && (++x < z); System.out.println(b1); System.out.println(x); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
安心と安全を備えた格安サービス!!
FC2レンタルサーバー>>>
登録はこちら>>>
フレッツ光加入で地デジ対応32型液晶TVプレゼント!
サンプルプログラム(Sample22_2.java)
class Sample22_2{ public static void main(String args[]){ int x = 10,y = 20,z = 30; boolean b1 = (x > y) && (++x < z); System.out.println(b1); System.out.println(x); } }
プログラムをコピーする場合すべて選択をクリックしてください。
サンプルプログラム(Sample22_3.java)
class Sample22_3{ public static void main(String args[]){ int x = 10,y = 20,z = 30; boolean b1 = (x < y) & (++x < z); System.out.println(b1); System.out.println(x); } }
プログラムをコピーする場合すべて選択をクリックしてください。
サンプルプログラム(Sample22_4.java)
class Sample22_4{ public static void main(String args[]){ int x = 10,y = 20,z = 30; boolean b1 = (x > y) & (++x < z); System.out.println(b1); System.out.println(x); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
4つのサンプルプログラムを作成しました。
コンパイル・実行してみます。
これら4つのプログラムを確認してください。
Sample22_2だけがxの値が変化していないことがわかります
Sample22_1は &&の左オペランドも右オペランドもtrueになります。
したかって、右の評価もされているので、xにインクリメントされるのです。したがってxは11になるわけです。
Sample22_2は左オペランドの値がfalseになります。その時点で全体の評価がfalseに
なります。したがって右オペランドは評価されません。
もちろんxにもインクリメントされないのでxの値は10のままです。
Sample22_3,Sample22_4はビット演算子の &を使用しています。
したがって、左オペランドの評価に関わらず必ず右オペランドも評価されるので、
xの値は11になります。
まとめ
&& |
a && b |
aがtrueのときはbも評価される |
&& |
a && b |
aがfalseのときはbは評価されない |
& |
a & b |
aがtrueのときはbは評価される |
& |
a & b |
aがfalseのときもbは評価される |