Java論理演算子の徹底解説!初心者から上級者までの10選

Javaの論理演算子を視覚的に理解するイメージ Java

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスはSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Javaプログラミング言語の学習において、論理演算子は非常に重要なトピックです。

この記事では、Javaの論理演算子について初心者から上級者まで幅広く理解できるよう詳細に解説していきます。

論理演算子は条件判断やデータのフィルタリングなど、多くの場面で用いられるため、その理解と適切な利用はプログラミングスキルを向上させるうえで不可欠です。

下記の項目を順を追って詳しく解説していきますので、じっくりとご覧ください。

●Javaの論理演算子とは

Javaの論理演算子は、主に条件式の作成や真偽値の操作に用いられます。

これらの演算子は、二つのブール式(trueかfalseの値を持つ式)を取り、一つのブール式を返すものが多いです。

論理演算子には主にAND(&&)、OR(||)、NOT(!)の3種類が存在し、これらを利用してさまざまな条件判断を行うことができます。

○論理演算子の基本

Javaの論理演算子の基本について説明します。

まず、AND演算子(&&)は、二つのブール式が共にtrueである場合にtrueを返し、それ以外の場合はfalseを返します。

次に、OR演算子(||)は、二つのブール式のうち少なくとも一つがtrueである場合にtrueを返します。

また、NOT演算子(!)は、一つのブール式の真偽値を反転させます。

すなわち、trueをfalseに、falseをtrueにします。

これらの基本的な使い方を理解することで、さまざまな条件判断やデータのフィルタリングなどのプログラムを作成することが可能となります。

論理演算子は、複雑な条件を表現するうえで必要となりますので、その使い方をしっかりと把握しておくことが重要です。

●論理演算子の使い方

論理演算子は、Javaにおいて条件式を構築したり、複数の条件を組み合わせたりする際に非常に重要な役割を果たします。

初心者から上級者までが理解しやすいように、基本的な使い方から段階を追って詳しく説明していきます。

Javaの論理演算子の種類とその使い方について詳しく見ていきましょう。

○サンプルコード1:AND演算子の基本的な使い方

初めに、AND演算子(&&)について解説します。

この演算子は、両方の条件がtrueである場合に限りtrueを返すという動作を行います。

ここで紹介するサンプルコードでは、変数aが10より大きく、20未満であるという2つの条件をAND演算子を使ってテストしています。

public class Main {
    public static void main(String[] args) {
        int a = 15;
        if (a > 10 && a < 20) {
            System.out.println("aは10より大きく、かつ20未満です。");
        } else {
            System.out.println("条件に合致しません。");
        }
    }
}

このコードを実行すると、「aは10より大きく、かつ20未満です。」と表示されます。

これは、aが15であるため、両方の条件がtrueとなり、if文内のコードが実行されるためです。

○サンプルコード2:OR演算子で条件判断をする方法

次に、OR演算子(||)の基本的な使い方を解説します。

この演算子は、どちらか一方の条件がtrueであればtrueを返す動作を行います。

下記のサンプルコードでは、変数bが10未満であるか、または30以上であるという条件をテストしています。

public class Main {
    public static void main(String[] args) {
        int b = 35;
        if (b < 10 || b >= 30) {
            System.out.println("bは10未満、または30以上です。");
        } else {
            System.out.println("条件に合致しません。");
        }
    }
}

このコードを実行すると、「bは10未満、または30以上です。」と表示されます。

これはbが35であるため、後半の条件がtrueと評価され、if文内のコードが実行されるからです。

○サンプルコード3:NOT演算子による反転の表現方法

Java言語におけるNOT演算子は、ある条件の反対を取るために使用されます。

これは特定の条件がfalseのときにtrueを返し、逆もまた然りです。

まず初めに、基本的なNOT演算子の使用方法を表すサンプルコードをご覧ください。

public class NotOperatorExample {
    public static void main(String[] args) {
        boolean isRainy = false;

        if (!isRainy) {
            System.out.println("天気は晴れです");
        } else {
            System.out.println("天気は雨です");
        }
    }
}

このコードではboolean型の変数isRainyを初期値falseとして定義しています。

次にif文を使って、isRainyの値がfalse(つまり!isRainyがtrue)の場合、”天気は晴れです”と出力します。

それ以外の場合(つまりisRainyがtrueの場合)、”天気は雨です”と出力します。

このコードを実行すると、”天気は晴れです”というメッセージが出力されます。

次に、このコードの応用例として、複数の条件を組み合わせたサンプルコードを見ていきましょう。

public class NotOperatorAdvancedExample {
    public static void main(String[] args) {
        boolean isRainy = false;
        boolean isHoliday = true;

        if (!isRainy && isHoliday) {
            System.out.println("晴れていて休日です。外出しましょう!");
        } else {
            System.out.println("家で過ごしましょう");
        }
    }
}

このコードでは、boolean型の変数isRainyとisHolidayを使って、天気が晴れでかつ休日の場合に特定のメッセージを出力する条件を作成しています。

このコードを実行すると、”晴れていて休日です。外出しましょう!”というメッセージが出力されます。

○サンプルコード4:XOR演算子での排他的な条件を設定する方法

Javaのプログラムにおける論理演算子の一つとして、XOR演算子があります。

この演算子は、二つの条件のうち一方だけが真の場合に真を返す、いわゆる排他的論理和を表現するものです。

この段階では、具体的なコードの解説に入る前に、XOR演算子の基本的な性質と利用シーンについてご説明します。

XOR演算子は「^」という記号を使って表され、次のような特性を持っています。

すなわち、2つのboolean値が異なる時に限りtrueを返し、2つのboolean値が同じである場合にはfalseを返します。

続いて具体的なコードの説明に入ります。JavaでのXOR演算子の利用例として、次のようなサンプルコードをご覧いただきます。

public class Main {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        boolean result = a ^ b;  // XOR演算子の利用
        System.out.println("結果は:" + result);  // 結果の出力
    }
}

このコードについて詳しく解説します。

まず、boolean型の変数aとbを初期化し、それぞれにtrueとfalseの値を代入しています。

次に、変数resultに対して「a ^ b」というXOR演算を行なっています。

このコードを実行すると、aとbの値が異なるため、XOR演算の結果としてtrueが返されます。

そして、結果は「結果は:true」としてコンソールに出力されます。

次に、このコードを少し変更して、aとbの値が同じ場合の結果を確認します。

public class Main {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = true;

        boolean result = a ^ b;  // XOR演算子の利用
        System.out.println("結果は:" + result);  // 結果の出力
    }
}

このバージョンのコードでは、aとb両方ともtrueの値が代入されています。

この場合、XOR演算の結果はfalseとなります。なぜなら、XOR演算は2つの値が異なる時に限りtrueを返すためです。

したがって、コンソールの出力は「結果は:false」となります。

このように、XOR演算子は条件の真偽が異なる時に真を返す特性を持つため、プログラム内で排他的な条件を設定する際に非常に有用です。

また、この演算子はビット演算でも用いられるため、数値のビットレベルでの操作が必要な場合にも利用されます。

●Javaでの論理演算子の応用例

論理演算子は単に真や偽を判断するだけではなく、多岐にわたる応用例を持つツールとしてJavaプログラムの中で非常に頻繁に用いられます。

基本的な論理演算子にはAND(&&), OR(||), NOT(!)がありますが、これらを組み合わせたり、他の演算子と一緒に使うことで、さまざまな条件判断や複雑なロジックを構築することが可能です。

ここでは、その応用例をいくつか見ていきましょう。

○サンプルコード5:複数の条件を組み合わせて判断する方法

Javaでの複数の条件を組み合わせて判断する方法は、いくつかの条件を論理演算子で連結し、複雑な条件式を作成することができます。

public class Main {
    public static void main(String[] args) {
        int age = 25;
        boolean isEmployed = true;
        boolean isStudent = false;

        if (isEmployed && age >= 20 && !isStudent) {
            System.out.println("この人は雇用されていて、20歳以上で、学生ではありません。");
        }
    }
}

このコードは、三つの変数age, isEmployed, isStudentを用いて複数の条件を組み合わせた条件式を作成しています。

そして、その条件式が真である場合に特定の処理を行います。

このコードを実行すると、「この人は雇用されていて、20歳以上で、学生ではありません。」という結果を得られます。

○サンプルコード6:論理演算子を使った条件の短縮法

論理演算子を利用した条件の短縮法とは、長い条件式を短く表現するための方法です。

下記のサンプルコードはその一例を表しています。

public class Main {
    public static void main(String[] args) {
        int score = 85;

        String grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D";
        System.out.println("あなたの成績は" + grade + "です。");
    }
}

このコードは三項演算子を用いて、長いif-else文を短く表現しています。

実行すると「あなたの成績はBです。」という結果が出力されます。

このように論理演算子を駆使することでコードを効率的にすることができます。

○サンプルコード7:論理演算子とビット演算子の組み合わせ

ここでは、Javaの論理演算子とビット演算子を組み合わせて使う方法について、一歩一歩丁寧に解説いたします。

論理演算子とビット演算子の組み合わせは、条件判断をより高度に行うプログラムを書く際に非常に便利です。

Javaでこれらの演算子を効果的に活用することで、初心者から上級者まで、プログラムの質を向上させることができます。

ここでは、具体的なサンプルコードを用いて、その実行方法と実行結果について詳細に説明していきます。

まずは、基本的なサンプルコードを見てみましょう。

このサンプルコードでは、論理演算子(&&, ||)とビット演算子(&, |, ^)を組み合わせています。

public class LogicalAndBitwiseOperators {
    public static void main(String[] args) {
        int a = 5; // 0101 in binary
        int b = 3; // 0011 in binary

        int bitwiseAnd = a & b; // 0001 in binary, or 1 in decimal
        int bitwiseOr = a | b; // 0111 in binary, or 7 in decimal
        int bitwiseXor = a ^ b; // 0110 in binary, or 6 in decimal

        boolean logicalAnd = (a > 2) && (b > 2);
        boolean logicalOr = (a > 2) || (b > 2);

        System.out.println("ビット単位のAND演算の結果: " + bitwiseAnd);
        System.out.println("ビット単位のOR演算の結果: " + bitwiseOr);
        System.out.println("ビット単位のXOR演算の結果: " + bitwiseXor);
        System.out.println("論理AND演算の結果: " + logicalAnd);
        System.out.println("論理OR演算の結果: " + logicalOr);
    }
}

このコードの詳細な説明を始めます。

最初に、整数abを定義し、それぞれに5と3を代入しています。

この数字は二進法で表現すると、aは0101、bは0011となります。

次に、ビット単位のAND、OR、XOR演算を行い、結果をそれぞれbitwiseAndbitwiseOrbitwiseXorという変数に格納します。

この計算の後、bitwiseAndは1(二進法で0001)、bitwiseOrは7(二進法で0111)、bitwiseXorは6(二進法で0110)となります。

さらに、このコードでは論理AND演算と論理OR演算も行っています。

ここでの論理AND演算は、aが2より大きいかつbが2より大きいかを評価しており、結果は真です。

論理OR演算は、aが2より大きいまたはbが2より大きいかを評価し、これも真となります。

次に、各結果をコンソールに出力する部分があります。

この部分で、先ほど計算した結果をそれぞれ表示しています。

このコードを実行すると、次の結果がコンソールに表示されます。

ビット単位のAND演算の結果: 1
ビット単位のOR演算の結果: 7
ビット単位のXOR演算の結果: 6
論理AND演算の結果: true
論理OR演算の結果: true

○サンプルコード8:条件のネストを避けるテクニック

Javaのプログラムにおいて、複数の条件分岐をネスト(入れ子)するのは、コードが複雑になり、可読性が低下します。

そこで、条件のネストを避けるテクニックを活用することで、コードが読みやすく、管理しやすくなります。

まず、初めにご紹介するのは早期リターンというテクニックを紹介します。

これは、条件が満たされなかった場合に早く処理を終了させるためのテクニックです。

下記のサンプルコードは、このテクニックを使用した例です。

public String evaluateGrade(int score) {
    if (score < 0 || score > 100) {
        return "無効なスコア";
    }
    if (score >= 90) {
        return "A";
    }
    if (score >= 80) {
        return "B";
    }
    if (score >= 70) {
        return "C";
    }
    if (score >= 60) {
        return "D";
    }
    return "F";
}

このコードでは、スコアが0未満や100を超える無効な範囲であるかどうかを最初に判断しています。

無効なスコアの場合はすぐに”無効なスコア”という文字列を返し、処理を終了します。

有効なスコアの場合は、後続のif文を進んでいき、それぞれの範囲に応じた評価を文字列として返します。

この方法では、ネストを使用せずに複数の条件を判断することができ、コードが読みやすくなります。

このサンプルコードを実行すると、スコアに応じた評価が得られます。

例えば、スコアが95の場合、「A」という結果が得られるのです。

次にご紹介するのは、条件式をメソッドに抽出するテクニックです。

これは、複雑な条件式を単一のメソッドに分離して、コードの見通しを良くするテクニックです。

下記のサンプルコードは、このテクニックを使用した例です。

public boolean isValidUser(User user) {
    return isAdult(user) && hasValidEmail(user) && hasValidAddress(user);
}

private boolean isAdult(User user) {
    return user.getAge() >= 18;
}

private boolean hasValidEmail(User user) {
    return user.getEmail().contains("@");
}

private boolean hasValidAddress(User user) {
    return user.getAddress() != null && !user.getAddress().isEmpty();
}

このコードでは、ユーザーが有効かどうかを判断するための複雑な条件式を、3つのプライベートメソッドに分離しています。

それぞれのメソッドは、特定の条件をチェックします。

これにより、各条件が独立してテストできるようになり、コードが読みやすく、保守しやすくなります。

このサンプルコードを実行すると、ユーザーが成人であり、有効なメールアドレスと住所を持っている場合にtrueが返され、そうでない場合にfalseが返されるのです。

○サンプルコード9:論理演算子を活用したデータフィルタリング

Javaの論理演算子を用いたデータフィルタリングのテクニックは非常に重要です。

特にデータベースからのデータ抽出や大量のデータを扱う際に効率よく条件に合致するデータを取り出すことが可能です。

今回はJavaを用いた論理演算子の活用方法をサンプルコードとともに解説します。

サンプルコードを見てみましょう。

ここでは、あるリストから特定の条件を満たすデータだけを抽出するシンプルなコードを作成します。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class LogicalOperatorExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        List<Integer> filteredNumbers = numbers.stream()
                .filter(n -> n > 5 && n % 2 == 0)
                .collect(Collectors.toList());

        System.out.println(filteredNumbers);
    }
}

このコードの解説を行います。

まず、Listという型の変数numbersを作成し、1から10までの整数を格納しています。

そして、streamのfilterメソッドを用いて、条件「n > 5 && n % 2 == 0」を満たすデータだけを抽出しています。

この条件は「nが5より大きく、かつ、nが偶数である」という条件を表しています。

実行すると、コンソールには「[6, 8, 10]」と表示されます。

これは6, 8, 10という3つの数値が、設定した条件「5より大きく、かつ、偶数である」という条件を満たしているためです。

○サンプルコード10:例外処理と論理演算子の組み合わせ

Javaプログラミングにおいて、例外処理と論理演算子を組み合わせるテクニックは非常に高度であり、これを理解しマスターすることで初心者から上級者までのステップアップが可能となります。

今回は、その技術を詳細に解説し、サンプルコードを交えてご紹介いたします。

詳細な説明を心がけることで、理解を深める手助けをすることを目指しています。

まずは、基本的な論理演算子の徹底解説から始めます。

Javaにおける論理演算子は、主に&&(AND)、||(OR)、!(NOT)の三つがあります。

これらの演算子は、条件式を組み立てる際に非常に役立つツールとなります。

次に、この知識を活かして例外処理と論理演算子の組み合わせを見ていきましょう。

例外処理は、プログラムが予期せぬ状況やエラーに遭遇した際に、それを適切にハンドリングする技術です。

ここでの目標は、例外処理と論理演算子を組み合わせて、プログラムの安全性と効率を高めることです。

それでは、サンプルコードを見ていきましょう。

下記のコードは、例外処理と論理演算子を組み合わせた一例です。

public class ExceptionAndLogicalOperators {
    public static void main(String[] args) {
        try {
            int x = 5;
            int y = 0;

            if (y != 0 && x / y > 2) {
                System.out.println("xはyより2倍以上大きいです");
            } else {
                System.out.println("条件が満たされません");
            }
        } catch (ArithmeticException e) {
            System.out.println("数学的なエラーが発生しました: " + e.getMessage());
        }
    }
}

このコードでは、tryブロック内で整数xとyの定義が行われています。

次に、if文の条件式で論理演算子&&が用いられており、yが0でないことと、xがyの2倍以上であることの両方が真である場合にのみ、”xはyより2倍以上大きいです”と出力されます。

もしyが0である場合、短絡評価の性質によって第二の条件は評価されず、”条件が満たされません”と出力されます。

また、0での割り算が行われると、ArithmeticExceptionが発生し、catchブロックが実行されます。

このコードを実行すると、実際には”条件が満たされません”と表示されます。

なぜなら、yが0であり、&&演算子の第一の条件が偽であるため、第二の条件は評価されず、elseブロックが実行されるからです。

●Javaの論理演算子の注意点と対処法

Ja論理演算子はプログラム内で条件式を扱う際に非常に重要な役割を果たしますが、いくつかの注意点があります。

それでは、各注意点とそれに対する対処法を詳細に解説し、サンプルコードを通じて実際の挙動を紹介します。

○短絡評価について

Javaの論理演算子には、「&&」(AND)と「||」(OR)という二つの論理演算子が存在し、これらは短絡評価(ショートサーキット評価)を行います。

短絡評価とは、最初の条件だけで結果が決定する場合に、次の条件の評価を省略することです。

これにより処理速度が向上しますが、副作用があるメソッドを条件式に用いると、予期せぬバグが発生する可能性があります。

下記のサンプルコードでは、methodBはmethodAがfalseを返した場合にのみ評価されます。

public class Main {
    public static void main(String[] args) {
        if (methodA() && methodB()) {
            System.out.println("両方のメソッドがtrueを返しました");
        }
    }

    public static boolean methodA() {
        System.out.println("methodAが呼ばれました");
        return false;
    }

    public static boolean methodB() {
        System.out.println("methodBが呼ばれました");
        return true;
    }
}

このコードを実行すると、「methodAが呼ばれました」というメッセージのみが表示され、「methodBが呼ばれました」というメッセージは表示されません。

これは、methodAがfalseを返したため、methodBは評価されないのです。

この現象を避けるためには、&や|といったビット演算子を使用することで、両方の条件が必ず評価されるようにできます。

下記のコードでは、methodBも評価されるため、両方のメッセージが表示されます。

if (methodA() & methodB()) {
    System.out.println("両方のメソッドがtrueを返しました");
}

このようにして、短絡評価を回避し、予期せぬバグを防ぐことができます。

また、この知識は論理演算子の優先順位と合わせて、より複雑な条件式を構築する際にも役立つでしょう。

○論理演算子の優先順位

論理演算子には優先順位があります。

これは、複数の演算子が組み合わされる場合にどの演算子が先に評価されるかを定めたものです。

優先順位は次のようになります。

  1. NOT演算子(!)
  2. AND演算子(&&)
  3. OR演算子(||)

この優先順位を理解しておくことで、括弧を適切に使用して複雑な条件式を明示的に表現することができます。

例えば、次のサンプルコードを見てみましょう。

if (!methodA() || methodB()) {
    System.out.println("条件が満たされました");
}

このコードでは、methodAがfalseを返し、かつmethodBがtrueを返した場合に、「条件が満たされました」というメッセージが表示されます。

優先順位を意識して条件式を構築することで、コードの読みやすさと正確性を保つことができます。

●カスタマイズ方法:論理演算子を使ったプログラムのカスタマイズテクニック

Javaでの論理演算子を活用することで、プログラムの条件判断やデータ処理をより効率的かつ洗練された方法で行うことが可能です。

今回は、それらの論理演算子を利用したカスタマイズテクニックに焦点を当て、具体的なサンプルコードとともに、その実行結果も交えて解説いたします。

ここでは、Javaの論理演算子のカスタマイズ方法に関して、豊富な知識と技術を持ったエンジニアやウェブライターの視点から、初心者でも理解しやすいよう丁寧に説明いたします。

まず、論理演算子の一つであるAND演算子(&&)を利用して、複数の条件を同時に満たす際の判断を行うカスタマイズテクニックを考えてみましょう。

サンプルコードを次のように設定することができます。

public class Main {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;

        if (a > 3 && b > 7) {
            System.out.println("aは3より大きく、かつbは7より大きいです");
        }
    }
}

このコードは、aが3より大きくかつbが7より大きいという二つの条件を同時に満たす場合に限り、特定の処理を実行します。

このように、AND演算子を使用することで、コードの可読性と効率性を向上させることが可能です。

続いて、OR演算子(||)を利用したテクニックを見てみましょう。

下記のサンプルコードは、二つの条件のうち少なくとも一つを満たす場合に特定の処理を実行します。

public class Main {
    public static void main(String[] args) {
        int a = 5;
        int b = 8;

        if (a > 10 || b > 7) {
            System.out.println("aが10より大きいか、bが7より大きいかのどちらかが満たされています");
        }
    }
}

このコードはaが10より大きいか、またはbが7より大きい場合に、System.out.printlnメソッドを用いて特定のメッセージを表示します。

OR演算子を使うことで、プログラムの条件分岐を簡潔かつ柔軟に行うことができます。

まとめ

この記事では、Javaの論理演算子に関して、初心者から上級者までがスムーズに理解できるように、基本から応用、注意点まで幅広くカバーいたしました。

この記事が、Javaの論理演算子を学び、使いこなす上での助けとなることを心より願っております。

何かご不明点やご質問がございましたら、お気軽にお問い合わせください。