Javaの論理演算子を極める!AND・OR・NOTと三項演算子のパターン。

Javaの論理演算子を極める!AND・OR・NOTと三項演算子のパターン。

この記事では、Javaの論理演算子について勉強していく。

Javaでは他のプログラミング言語と同様に様々な演算子(記号)が使用されるが、論理演算子はその中でももっともよく使用される演算子である。

ここでは、少し数学的な思考力が求められる。苦手と感じる人もいるかもしれないが、バグが無く正しく動くコードを書く上ためには論理演算子の理解は必須だ。色々な組み合わせを実行してぜひ正しい理解に繋げてほしい!

UgoCompiler

当サイトでは、自作のJavaCompiler「UgoCompiler」を用意している。UgoCompilerを使えばオンライン上で気軽に自分の書いたコードを実行することができる。 登録なしですぐに使うことができるので、ぜひ試してみてほしい! (下の写真をクリックすると新しいタブで開きます。)

Javaの演算子一覧

まずはJavaで使用する演算子を一覧で確認しよう。

「演算子」とはプログラム内で使われる指示記号のことで、Javaでは以下のような演算子を使用することができる。

種類役割記号
比較演算子比較<, >, <=, >=
等式==, !=
論理演算子論理和・論理積・否定&&, ||, !
三項演算子条件? :
算術演算子計算+, -, *, /, %
単項演算子インクリメントvar++, ++var
デクリメントvar–, –var
数値変換+var, -var
シフト演算子シフト<<, >>, >>>
ビット演算子論理和・論理積・
排他的論理和・否定
& ,| ,^,~
代入演算子代入=, +=, -=, *=, /=, %=,
&=, ^=, |=, <<=, >>=, >>>=
Javaの演算子一覧

論理演算子の種類と使い方

では、論理演算子に分類される3つの演算子について見ていこう。

論理積 AND &&

最初に勉強したいのは「論理積」と呼ばれる演算子。「Aでもあり、Bでもある」といった条件をあらわす。

JavaではAND条件は「&&」を使ってあらわす。

boolean conditionA = true;
boolean conditionB = false;

if (conditionA && conditionB) {
    System.out.println("条件に当てはまります。"); 
} else {
    System.out.println("条件に当てはまりません。"); 
}

conditionA・conditionBの両方がtrueだった時のみに「条件に当てはまります。」が出力されるはずなのでbooleanの値を変えて試してみてほしい。

論理和 OR ||

次に紹介するのは「論理和」。「AもしくはBであるならば」という条件をあらわす。

JavaではOR条件は「||」を使って示す。

boolean conditionA = true;
boolean conditionB = false;

if (conditionA || conditionB) {
     System.out.println("条件に当てはまります。");
} else {
     System.out.println("条件に当てはまりません。");
}

この場合はconditionA・conditionBのいずれかがtrueであれば「条件に当てはまります。」が出力されるはずだ。

論理否定 NOT 否定 !

3つ目の論理演算子は否定演算子「!」だ。

否定演算子を使用するとTRUE(正)だった条件がFALSE(誤)に、また、逆にFALSE だった条件がTRUEに替わる。

うまく使いこなせばコードをシンプルに理解しやすく保つことができる。

boolean condition = true;

if (!condition) {    
System.out.println("条件に当てはまりません。");
}

「=」等式を否定したい場合は「!=」と表記する。

int a = 15;
int b = 20;
if (a != b) {
	System.out.println("aとbは違う数です。");
}

比較式を否定したい場合は、比較式を丸カッコでくくりその前に「!」を付ける。

int age = 15;
if (!(age > 20)) {
	System.out.println("未成年者です。");
}

論理演算子を使う複雑なパターン

次にANDとORが混同する複雑なパターンについて考えてみよう。

ANDとORが混同する例

次にひとつの条件式にANDとORが混同するパターンを考えてみよう。

if (conditionA && conditionB || conditionC) {
     System.out.println("条件に当てはまります。"); 
} else {
     System.out.println("条件に当てはまりません。"); 
}    

演算の順序を指定する

このようなANDとORが混同する式では、どの組み合わせで条件が満たされるのかが分かりにくい。こういった場合は、通常の数学式と同様に丸カッコを使って数式のまとまりを指定することができる。

if ((conditionA && conditionB) || conditionC)

この記事のサンプルコード

以下はこの記事のサンプルコードだ。実際にコードをいじってみて結果がどう変化するか、一度確認してみてほしい。

class LogicalOperatorClass {

    public static void main(String[] args) {

        int year = 16;
        boolean isNewUser = true;

        // AND条件の例
        if (year > 18 && isNewUser) {
            System.out.println("クレジットカードの広告を表示する。");
        } else {
            System.out.println("その他の商品の広告を表示する。");
        }

        // OR条件の例
        if(year > 18 || isNewUser) {
            System.out.println("新製品の広告を表示する。");
        } else {
            System.out.println("その他の商品の広告を表示する。");
        }

        // 論理否定の例
        if(!isNewUser) {
            System.out.println("サインインしてください。");
        } else {
            System.out.println("ログインしてください。");
        }

        System.out.println(!isNewUser ? "サインインしてください。" : "ログインしてください。");
    }
}