【Java】equals()メソッドの使い方

equals()メソッドの使い方_アイキャッチ画像 Java

「equals()メソッドって出てきたけど、いつ使うの?どう使うの?」

「比較演算子の” == ”と何が違うの?」

という方に向けて、equals()メソッドの使い方、比較演算子「==」との違いを解説します。

equals()メソッドの使い方

equals()メソッドの構文は以下の通りです。

A.equals(B)

AとBが等しいか比較し、等しければtrueを、等しくなければfalseを返します。
(A、Bはオブジェクトです。)

実際には、if文などの条件分岐に使用することが多いです。

以下が具体例です。

class Test{
 String message1 = "おはよう";
 String message2 = "こんにちは";

 if(message1.equals(message2)){
  System.out.println("同じメッセージだよ");
 }else{
  System.out.println("違うメッセージだよ");
 }
}

ここで、5行目に注目してください。

equals()メソッドは、値が等しければtrueを返し、等しくなければfalseを返します。

そのため、if文の条件にequals()メソッドを書くだけで、等しければifブロック内に入り、等しくなければelseブロック内に入ります。

比較演算子「==」とequals()メソッドの違い

等しいかどうかの比較 といえば、真っ先に比較演算子の「==」が思い浮かびますよね。

比較演算子「==」とequals()メソッドの違いは、比較するオブジェクトの違いにあります。

比較演算子「==」プリミティブ型オブジェクトの比較に使います。

一方、equals()メソッドは、参照型オブジェクトの比較に使います。

オブジェクトにはプリミティブ型と参照型存在し、プリミティブ型は値そのものが変数に代入され、参照型は値の保存先アドレスが代入されています。

プリミティブ型には、intやbooleanなどが、参照型にはStringやインスタンス化したオブジェクトなどがあります。

プリミティブ型と参照型について詳しく知りたい方は、以下の記事を参考にしてください。


実際に具体例を見てみましょう。

このプログラムでは、「こんにちは」という文字列の入ったString型のオブジェクトを比較しています。

コードは読み飛ばしても良いので、実行結果に注目してください。

public class Test {
	public static void main(String[] args) {
		String message1 = "こんにちは";

		String text1 = "こんに";
		String text2 = "ちは";
		String message2 = text1 + text2;

		//「==」を使った比較
		System.out.println("-----比較演算子「==」を使った比較-----");
		//message1とmessage2の比較
		if(message1 == message2) {
			System.out.println("「" + message1 + "」" + "と「" + message2 + "」は同じだよ");
		}else {
			System.out.println("「" + message1 + "」" + "と「" + message2 + "」は違うよ");
		}

                System.out.println();
		//equals()メソッドを使った比較
		System.out.println("-----equals()メソッドを使った比較-----");
		//message1とmessage2の比較
		if(message1.equals(message2)) {
			System.out.println("「" + message1 + "」" + "と「" + message2 + "」は同じだよ");
		}else {
			System.out.println("「" + message1 + "」" + "と「" + message2 + "」は違うよ");
		}
	}
}


以下が実行結果です。

比較演算子「==」で比較すると、同じ「こんにちは」でも異なるものだと判定されます。

一方、equals()メソッドを用いた比較では、同じだと判定されています。

どうしてこのような結果になるのでしょう?

比較演算子「==」ではオブジェクトの中身を比較します。

参照型のオブジェクトの中身は、あくまで「こんにちは」という文字列が保存されている場所の情報であり、文字列の保存場所はmessage1とmessage2では異なります。

そのため、文字列の内容が同じでも、保存場所が異なるため、2つのオブジェクトは異なると判定されてしまったのです。

保存場所の情報を比較したい時には、「==」を使っても問題ありません。

しかし、内容が等しいか比較する時は、equals()メソッドを使いましょう。

まとめ

equals()メソッドの書き方

A.equals(B); //戻り値はtrueかfalse

比較演算子「==」との違い
 ・比較演算子「==」はプリミティブ型オブジェクトの比較
 ・equals()メソッドは参照型オブジェクトの比較

コメント

タイトルとURLをコピーしました