HOME> 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)のtrue,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は評価される

ページのトップへ戻る