Javaをはじめよう!第11回~関係演算、論理演算とは~

2016/01/25

はじめに

前回は演算の優先順位と、算術演算のについて『+』の機能についてご紹介いたしました。

今回は関係演算と、論理演算について詳しくご紹介いたします。

演算子

関係演算(比較演算)

関係演算とは、2つの値を比較し結果をboolean値型で返す二項演算の一つです。
関係演算子は2つに分類され、一つは値の数値を比較し大小の関係を返す数値比較演算と、2つの値が等しいかどうかを返す等価比較演算に分類されます。
それでは例を見てみましょう。

Sample15.java

package chap02;

class Sample15{
	public static void main(String[] args){
		int i1 = 10;
		int i2 = 10;
		int i3 = 20;

		System.out.println(i1 > i2);		//10 > 10なので偽
		System.out.println(i1 < i3);		//10 < 20なので真 System.out.println(i1 >= i3);		//10 >= 20なので偽
		System.out.println(i1 <= i2);		//10 <= 10なので真
		System.out.println(i1 == i2);		//10 == 10なので真
		System.out.println(i1 != i2);		//10 != 10なので偽		
	}
}

実行例

false
true
false
true
true
false

では解説していきます。『>』『<』『>=』『<=』については』普通の数字の数学と同じ結果になっています、正しければ、true、正しくなければfalseを返します。
『==』『!=』については初めて見る方もいるのではないでしょうか。

● 『==』は、2つの値が等しければtrueを、等しくなければfalseを返します。これが数値比較です
● 『!=』は、『==』の逆で、等しければfalseを、等しなければ、trueを返します。これが等価比較演算です

 

論理演算

boolean型の値同士の論理演算をし、boolean型の結果を得る二項演算子処理の一つです。
論理演算は、いろいろな条件を使った条件判断をする処理に利用されます。

論理演算では2種類の演算方式しかなく、論理AND演算と論理OR演算に分類されます。
また、その処理形式も2種類ずつしかなく、論理演算の特性を活かして標準型よりも、早く結果を得るためのショートカット型の演算子があります。

■『&&』の場合(左辺、右辺、両方ともtrueの場合のみtureになります。)

&&01&&

 

■『||』の場合(左辺、右辺、片方がtureの場合のみtrueになります。)

||01||

 

■『!』の場合(これは単項演算子です。値がtrueの場合、false、値がfalseの場合trueになります。)

!01!

論理演算のショートカット型について説明します。
標準型の論理演算は『&』と『|』で記述し、ショートカット型は『&&』と、『||』で記述します。
違いはショートカット型はその名の通りショートカットします。

例えば、『&&』を使用する場合、左辺を計算してから右辺を計算しますので、左辺の時点でfalseならば右辺がtrueでもfalseでも解はfalseになります。
その右辺の確認の処理を省くのがショートカット型です。
また、標準型の『&』は、たとえ右辺の演算結果がfalseであっても右辺の演算を必ず実行します。

それではまず、標準型の論理演算を使ったプログラムを見てみましょう。

Sample16.java

package chap02;
public class Sample16{

	public static void main(String[] args){
		int i1 =1;
		int i2 =2;
		int i3 =3;
		int i4 =4;

		System.out.println(i1 < i2 & i3 ==i4);  //true & false
		System.out.println(i1 <i2 | i3 ==i4);  //true | false
		System.out.println(!(i1 <i2));         // !true
	}
}

実行例

false
true
false

処理の流れを説明します。
●まず『i1 < i2 & i3 ==i4』は置き換えると、『true & false』ですのでfalseです。

●次に『i1 <i2 | i3 ==i4』は置き換えると、『true | false』ですのでtrueです。

●最後の『!(i1 <i2)』は置き換えると、『!true』ですのでfalseです。

次にショートカット型の論理演算の処理を見てみましょう。基本的にはショートカット型の論理演算の方を多用します。なぜならば処理が早くなるからです。
短いプログラムでは体感できないかもしれませんが大きなプログラムになると違いが出てきます。

Sample16.java

package chap02;
public class Sample16{

	public static void main(String[] args){
		int i1 =1;
		int i2 =2;
		int i3 =3;
		int i4 =4;

		System.out.println(i1 < i2 && i3 ==i4);  //true && false
		System.out.println(i1 <i2 || i3 ==i4);  //true || false
		System.out.println(!(i1 < i2));         // !true
	}
}

実行例

false
true
false

同じ処理の結果となります。

先程との違いは
●左辺がtrueなので、右辺の演算も行い結果falseだったので、解がfalseとなります。
●こちらは左辺がtrueなので、右辺を判断せずにtrueを返しています。
●比較対象にはショートカット型はありません。

さいごに

今回は、関係演算と論理演算について詳しく紹介いたしました!
次回は、代入演算について詳しくご紹介いたします!

投稿者情報

パンダマン

パンダマン

パンダマンです。

主にWebシステム開発等を担当しております。
設計・プログラミング。サーバー管理なんでもやります。

今、担当しているプロジェクトではJavaの今まで触れたことのないフレームワークを使うことになり勉強中です。
学生にC言語のプログラミングの基礎を教えたりもしています。
最近「キングダム」にはまっています。

>> パンダマンが執筆した他の記事を読む

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー