Javaの比較演算子を8選で徹底解説

Javaの比較演算子のイラストとサンプルコード Java
この記事は約23分で読めます。

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

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

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

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

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

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

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

はじめに

Javaプログラミングを学ぶ際、比較演算子は基本中の基本とも言えるテーマです。

この記事では、Javaの比較演算子を8選で徹底解説します。Javaの比較演算子を初心者向けにわかりやすく8選で解説します。

使い方、サンプルコード、応用例を含め、プログラミングの基礎を固めるためのガイドとしてご紹介します。

さらに、注意点やカスタマイズの方法もお伝えしますので、プログラミングスキルアップを目指す方にも有用な情報を提供いたします。

●Javaの比較演算子とは

Javaにおける比較演算子は、変数や値を比較する際に使用される記号です。

これらの演算子は、主にif文やwhile文といった制御文内で利用されます。

比較演算子は基本的に2つの値を比較し、その結果として真(true)または偽(false)を返します。

これによりプログラムは特定の条件が満たされたかどうかを判断することができます。

○基本的な比較演算子の概要

基本的な比較演算子にはいくつかの種類があります。

それぞれの演算子とその役割について詳しく説明いたします。

□==(等しい)とは

「==」は等しいという比較を行う演算子です。

2つの値が等しい場合にtrueを返し、等しくない場合にはfalseを返します。

例えば、5 == 5はtrueを返しますが、5 == 4はfalseを返します。

□!=(等しくない)とは

「!=」は等しくないという比較を行う演算子です。

2つの値が等しくない場合にtrueを返し、等しい場合にはfalseを返します。

例えば、5 != 4はtrueを返し、5 != 5はfalseを返します。

□<(より小さい)とは

「<」はより小さいという比較を行う演算子です。左側の値が右側の値より小さい場合にtrueを返し、そうでない場合にはfalseを返します。

例えば、4 < 5はtrueを返しますが、5 < 4はfalseを返します。

□>(より大きい)とは

「>」はより大きいという比較を行う演算子です。

左側の値が右側の値より大きい場合にtrueを返し、そうでない場合にはfalseを返します。

例えば、5 > 4はtrueを返しますが、4 > 5はfalseを返します。

□<=(以下)とは

「<=」は以下という比較を行う演算子です。

左側の値が右側の値以下の場合にtrueを返し、そうでない場合にはfalseを返します。

例えば、4 <= 5や4 <= 4はtrueを返しますが、5 <= 4はfalseを返します。

□>=(以上)とは

「>=」は以上という比較を行う演算子です。

左側の値が右側の値以上の場合にtrueを返し、そうでない場合にはfalseを返します。

例えば、5 >= 4や5 >= 5はtrueを返しますが、4 >= 5はfalseを返します。

●比較演算子の詳しい使い方

比較演算子はプログラミング言語Javaにおいて非常に重要な役割を果たし、条件分岐やループ制御の基盤となります。

比較演算子を使うことで、変数や値が特定の条件を満たすかどうかを判断し、それに基づいた動作をプログラムが行えるようになります。

ここでは、比較演算子の詳細な使い方について徹底的に解説します。

○サンプルコード1:==と!=の基本的な使用例

Javaの比較演算子で最も基本的な==!=を使ったコードの例をご紹介します。

このコードでは変数aと変数bの値を比較しています。

では、実際のサンプルコードとその説明を見ていきましょう。

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

        System.out.println("a == b: " + (a == b)); // false
        System.out.println("a != b: " + (a != b)); // true
    }
}

上記のサンプルコードでは、変数aと変数bの値を比較し、その結果をコンソールに出力しています。

a == b5 == 10となるため、結果はfalseとなります。

一方で、a != b5 != 10となるため、結果はtrueとなります。

このような比較演算子の使用法を把握することは、プログラムの基礎を学ぶ上で非常に重要です。

○サンプルコード2:<と>の応用的な使用例

Javaの比較演算子<と>はプログラムにおける条件分岐やループの制御など、多岐にわたる場面で利用されます。

特に、数値の比較においてこの2つの演算子は頻繁に用いられるため、初心者から上級者までがマスターするべき重要なトピックとなります。

今回は、これらの演算子の応用的な使用例を解説します。

まずは、比較演算子<と>の基本的な使用法から見ていきます。

基本的な形としては、<は左の値が右の値より小さい場合に真を返し、>は左の値が右の値より大きい場合に真を返します。

この性質を利用して、条件分岐やループの制御を行います。ここでは、Javaでの簡単なコード例を見ていきましょう。

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

        if (a < b) {
            System.out.println("aはbより小さい");
        } 

        if (a > b) {
            System.out.println("aはbより大きい");
        }
    }
}

上記のコードでは、変数aとbを宣言し、aがbより小さいかどうか、そしてaがbより大きいかどうかを比較しています。

この場合、”aはbより小さい”というメッセージがコンソールに表示されます。

次に、これらの演算子の応用例を見ていきます。

一般的な応用例としては、配列やリストの要素を順に比較し、特定の条件を満たす要素を抽出したり、並び替えたりすることがあります。

リストの要素を順に比較して、特定の条件を満たす要素を抽出するJavaコードの例を紹介します。

import java.util.ArrayList;
import java.util.List;

public class AdvancedComparisonExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(3);
        numbers.add(7);
        numbers.add(2);
        numbers.add(8);

        for (int number : numbers) {
            if (number > 5) {
                System.out.println(number + "は5より大きい");
            }
        }
    }
}

このコードでは、ArrayListに4つの要素を追加し、for-eachループを使用して各要素を順に比較します。5より大きい数が見つかるたびに、その数と共にメッセージをコンソールに表示します。

この場合、”7は5より大きい”と”8は5より大きい”というメッセージがコンソールに表示されます。

○サンプルコード3:<=と>=を組み合わせた複雑な条件

Javaの比較演算子である「<=(以下)」と「>=(以上)」は、それぞれ数字や変数が特定の値以下、もしくは以上であることを確認するための演算子です。

これらの演算子を組み合わせることで、ある範囲内の条件を作ることができます。

ここでは、これらの演算子を組み合わせた複雑な条件の作成方法とサンプルコードを提供し、詳細に説明いたします。

下記のサンプルコードは、ある数値が特定の範囲内にあるかどうかを判定するJavaプログラムです。

public class ComparisonOperatorSample {
    public static void main(String[] args) {
        int x = 5;
        // xが1以上10以下の範囲にあるかどうかを確認
        if (x >= 1 && x <= 10) {
            System.out.println("xは1以上10以下の範囲にあります");
        } else {
            System.out.println("xは1以上10以下の範囲にありません");
        }
    }
}

このサンプルコードにおける詳細な説明は次の通りです。

まず、int x = 5;というコード行で、整数型の変数xを宣言し、その値を5に設定しています。

次に、if文を使用して、xが1以上10以下の範囲にあるかどうかを判定しています。

この判定は、x >= 1 && x <= 10という複雑な条件を使って行っています。

この条件は、「xが1以上であり、かつ、xが10以下である」という意味になります。

次に、この条件が真であれば(つまりxが1以上10以下の範囲にある場合)、”xは1以上10以下の範囲にあります”というメッセージを出力します。

条件が偽である場合(xが1より小さいか10より大きい場合)、”xは1以上10以下の範囲にありません”というメッセージを出力します。

実行結果として、xの値が5であるため、”xは1以上10以下の範囲にあります”というメッセージがコンソールに表示されます。

●比較演算子の応用例

Javaの比較演算子はプログラミング初心者から上級者まで幅広く利用される基本的な演算子です。

ここではその比較演算子のさらなる応用例を取り上げます。

応用例としては文字列の比較が挙げられますが、その前に基本的な知識として文字列とは文字の集まりであり、JavaではStringクラスとして扱われるものと理解しておくと良いでしょう。

○サンプルコード4:文字列の比較

文字列の比較はJavaのプログラミングにおいて非常に一般的な操作です。

文字列の比較は主にequalsメソッドやcompareToメソッドを使用します。

下記のサンプルコードでは、equalsメソッドとcompareToメソッドを用いた文字列の比較方法を紹介します。

// 文字列の比較サンプルコード
public class StringComparison {
public static void main(String[] args) {
String str1 = "Java";
String str2 = "JAVA";
String str3 = "Java";

csharp
Copy code
    // equalsメソッドを使用した文字列の比較
    System.out.println(str1.equals(str2)); // false
    System.out.println(str1.equals(str3)); // true

    // compareToメソッドを使用した文字列の比較
    System.out.println(str1.compareTo(str2)); // 負の数
    System.out.println(str1.compareTo(str3)); // 0
    }
}

上記のサンプルコードの詳細な説明を行います。

まず、”String str1 = “Java”;”、”String str2 = “JAVA”;”、”String str3 = “Java”;”という3つの文字列変数を宣言しています。

次に、equalsメソッドを使用して、str1とstr2、str1とstr3を比較しています。

str1とstr2は異なるためfalseが、str1とstr3は同じためtrueが出力されます。

compareToメソッドも用いて文字列の比較を行っています。

このメソッドは2つの文字列が異なる場合、差を表す整数が出力され、同じ場合には0が出力されます。

str1とstr2は異なるため負の数が、str1とstr3は同じため0が出力されるのです。

○サンプルコード5:オブジェクトの比較

Javaプログラミングにおけるオブジェクト比較は非常に重要なトピックであり、オブジェクトの属性や特性を比較する際に利用されます。

ここでは、オブジェクトの比較に関するサンプルコードとその詳細な説明を提供します。

また、そのコードがどのような結果をもたらすかも解説します。

注意して頂きたいのは、オブジェクト間の比較には「==」と「equalsメソッド」が利用される点です。

まずは、「==」演算子を使った比較から見ていきましょう。

この演算子はオブジェクトの参照が等しいかどうかを調べます。

下記のサンプルコードは、二つの異なるStringオブジェクトを生成し、その後「==」演算子を使って比較しています。

public class ObjectComparison {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println(str1 == str2); // 出力:false
    }
}

このコードでは、str1str2が異なるオブジェクトであるため、比較結果はfalseとなります。

ここで、「==」はオブジェクトのメモリアドレスを比較しているため、異なるオブジェクトが同じ値を持っていてもfalseを返すことがわかります。

次に、「equals」メソッドを使用した比較について見ていきましょう。

このメソッドはオブジェクトの内容が等しいかどうかを評価します。

下記のコードは「equals」メソッドを使用してstr1str2の内容を比較しています。

public class ObjectComparison {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println(str1.equals(str2)); // 出力:true
    }
}

このサンプルコードでは、str1.equals(str2)がtrueを返します。

これはstr1str2が異なるオブジェクトであっても、その内容(この場合は文字列”Hello”)が等しいためです。

○サンプルコード6:日付の比較

Javaプログラミング言語での日付の比較は非常に重要なトピックであり、それは多くの実務プログラミングのシナリオに直接関係があります。

ここでは、Javaで日付を比較するいくつかの方法とそれらの使用例を紹介します。

日付の比較は比較演算子だけでなく、特定のクラスやメソッドを使用することもよくあります。

まず第一に、java.util.Date クラスを利用する方法があります。

このクラスは compareTo メソッドを提供しており、それを使用して日付を比較することができます

下記のサンプルコードでは、2つのDateオブジェクトを作成し、それらを比較します。

import java.util.Date;

public class DateComparison {
    public static void main(String[] args) {
        Date date1 = new Date(2023, 8, 13);
        Date date2 = new Date(2023, 8, 20);

        if (date1.compareTo(date2) < 0) {
            System.out.println("date1はdate2より前です");
        } else if (date1.compareTo(date2) > 0) {
            System.out.println("date1はdate2より後です");
        } else {
            System.out.println("date1とdate2は同じです");
        }
    }
}

このサンプルコードでは、DateクラスのcompareToメソッドを使用して2つの日付を比較しています。

このメソッドは、日付が等しい場合は0、最初の日付が第二の日付より前である場合は負の整数、後である場合は正の整数を返します。

また、java.time.LocalDateTime クラスや java.time.LocalDate クラスも日付の比較に利用できます。

これらのクラスは、isBeforeisAfterisEqual といったメソッドを提供しており、それらを使って日付の比較を行うことができます。

下記のコードは、LocalDateクラスを使用した日付の比較の例です。

import java.time.LocalDate;

public class DateComparison {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2023, 9, 13);
        LocalDate date2 = LocalDate.of(2023, 9, 20);

        if (date1.isBefore(date2)) {
            System.out.println("date1はdate2より前です");
        } else if (date1.isAfter(date2)) {
            System.out.println("date1はdate2より後です");
        } else {
            System.out.println("date1とdate2は同じです");
        }
    }
}

このコードでは、LocalDateクラスのisBefore, isAfter, isEqualメソッドを利用して日付の比較を行っています。

それぞれのメソッドは日付が前であるか、後であるか、等しいかを判断して真偽値を返します。

このようにして、Javaで日付の比較を行うことができます。

○サンプルコード7:配列の要素の比較

Javaにおける配列の要素の比較は、プログラムの中で多くの場面で必要とされます。

特に、配列の中身をソートしたり、特定の条件でフィルタリングしたりする際には、比較演算子を効果的に利用することが可能です。

ここでは、Javaで配列の要素を比較する際の基本的な方法とサンプルコードを紹介します。

まず、配列の要素を比較する基本的な方法は、二つの要素を取り出し、比較演算子(==, !=, <, >, <=, >=)を用いて比較することです。

具体的なサンプルコードとその解説をします。

public class ArrayElementComparison {
    public static void main(String[] args) {
        int[] array1 = {1, 2, 3, 4, 5};
        int[] array2 = {3, 4, 5, 6, 7};

        // 二つの配列の同じインデックスの要素を比較する
        for (int i = 0; i < array1.length; i++) {
            if (array1[i] == array2[i]) {
                System.out.println("array1の" + i + "番目の要素はarray2の" + i + "番目の要素と等しいです");
            } else {
                System.out.println("array1の" + i + "番目の要素はarray2の" + i + "番目の要素と等しくありません");
            }
        }
    }
}

このコードでは、array1array2という二つの配列があります。

forループを使って、それぞれの配列の同じインデックスの要素を比較しています。

比較演算子==!=を用いて、等しいか等しくないかを判断しています。

このコードを実行すると、次のような結果が得られます。

array1の0番目の要素はarray2の0番目の要素と等しくありません
array1の1番目の要素はarray2の1番目の要素と等しくありません
array1の2番目の要素はarray2の2番目の要素と等しいです
array1の3番目の要素はarray2の3番目の要素と等しいです
array1の4番目の要素はarray2の4番目の要素と等しくありません

この出力から、配列の要素の比較が行えることが確認できます。比較演算子を使うことで、配列の要素同士を容易に比較することができ、それに基づいてさまざまな処理を行うことが可能です。

●注意点と対処法

比較演算子を使用する際にはいくつかの注意点と対処法があります。

次の項目ではそれらについて詳細に解説していきます。

○NaNの扱い

Javaで数値計算を行う際、場合によってはNaN(Not a Number)という特殊な値が結果として出力されることがあります。

NaNは数値としての意味を持たず、他の任意の数値との比較が常にfalseとなる特性があります。

例として、0.0 / 0.0 という計算を行うとNaNが返されます。

このような場合、比較演算子を使用しても期待する結果を得ることができません。

下記のサンプルコードをご覧ください。

public class Main {
    public static void main(String[] args) {
        double result = 0.0 / 0.0;
        System.out.println(result == 0.0); // 出力: false
        System.out.println(result != 0.0); // 出力: true
        System.out.println(result == result); // 出力: false
    }
}

このコードでは、0.0 / 0.0 という計算を行ってresultという変数に結果を格納しています。

そして、そのresultを0.0やresult自身と比較していますが、いずれの比較も期待する結果を得ることができません。

これを避けるためには、DoubleクラスのisNaNメソッドを使ってNaNを判断できます。

下記のサンプルコードがその使用例です。

public class Main {
    public static void main(String[] args) {
        double result = 0.0 / 0.0;
        System.out.println(Double.isNaN(result)); // 出力: true
    }
}

上記のサンプルコードでは、isNaNメソッドを使ってresultがNaNであるかどうかを判断しています。

これにより、NaNの扱いに関する問題を避けることができます。

○nullとの比較

Javaにおけるnullは、オブジェクトが存在しないことを表す特殊な値です。

nullとの比較は特にオブジェクトの比較において注意が必要となります。

オブジェクトがnullであるかどうかを判断するには、比較演算子の==!=を使用します。

下記のサンプルコードは、nullとの比較を行う基本的な例です。

public class Main {
    public static void main(String[] args) {
        String str = null;
        System.out.println(str == null); // 出力: true
        System.out.println(str != null); // 出力: false
    }
}

このコードではstrという変数にnullを代入し、その後nullとの比較を行っています。

nullとの比較はこれらの比較演算子を使用して行えますが、nullオブジェクトのメソッドを呼び出すとNullPointerExceptionが発生するので注意が必要です。

●比較演算子のカスタマイズ方法

Javaの比較演算子のカスタマイズ方法について解説します。

比較演算子は、基本的にJava言語で提供されているものを利用しますが、独自のカスタマイズが必要な場合もあります。

ここでは、そのような特殊な状況での比較演算子のカスタマイズ方法について説明します。

まず初めに、Comparatorインターフェイスを利用した方法について詳しく見ていきましょう。

Comparatorインターフェイスを利用すると、独自の比較方法を定義することができます。

下記のようなコード例を見ていきましょう。

import java.util.Comparator;

public class CustomComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 % 2 - o2 % 2; // 奇数と偶数を比較
    }
}

このコードではComparatorインターフェイスを実装したCustomComparatorクラスを作成しています。

compareメソッド内で奇数と偶数を比較するカスタムの比較方法を定義しています。

ここではo1とo2の余りを求め、その差を返すことで奇数と偶数を区別しています。

次にこのカスタムコンパレータを利用して、配列やリストのソートを行ってみましょう。

下記のようなコード例を参考にします。

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.sort(new CustomComparator());

        for (Integer integer : list) {
            System.out.println(integer);
        }
    }
}

上記のコードを実行すると、リスト内の奇数が先に来るようにソートされた結果が得られます。

具体的には、1, 3, 5, 2, 4という順番で出力されることになります。

このようにして、Comparatorインターフェイスを利用することで、独自の比較方法をカスタマイズできるのです。

また、Java8以降ではラムダ式を利用してさらに簡潔にカスタムコンパレータを作成することも可能です。

下記のようなコード例を見てみましょう。

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.sort((o1, o2) -> o1 % 2 - o2 % 2); // ラムダ式を利用したカスタムコンパレータ

        for (Integer integer : list) {
            System.out.println(integer);
        }
    }
}

このコード例でも、前述のコードと同様の結果が得られます。ラムダ式を利用することでコードがさらに簡潔になります。

まとめ

Javaの比較演算子は、プログラミングの基礎となる重要な部分であり、その理解はJava言語の効果的な利用へと繋がります。

本ガイドでは、Javaの比較演算子を8選挙介し、それぞれの基本的な使い方から応用例、そして注意点に至るまでを詳細に解説しました。

本ガイドを通じて、Javaの比較演算子に関する基本的な知識から応用技術までを網羅的に学べる内容となっております。

プログラミングの基礎を固める上で、このガイドが手助けとなることを願っております。

以上、Javaの比較演算子を8選で徹底解説したガイドをお楽しみいただき、ありがとうございました。

今後とも、より良いコンテンツの提供を心掛けて参りますので、よろしくお願いいたします。