Java 文字列の値を比較(==ではなくequalsを使用)

Javaで文字列の値を比較するときは、==ではなくequalsを使用します。

目次

サンプル 文字列の値を比較する(equalsメソッド)
  文字列の値を比較する(Apacheのequalsメソッド)
 参考 文字列の値を比較する(compareToメソッド)
  大文字と小文字を区別せず比較する(equalsIgnoreCaseメソッド)

文字列の値を比較する(equalsメソッド)

public boolean equals(Object anObject)
  • 文字列の値を比較するときは、==ではなくequalsを使用します。
    →値が等しくStringオブジェクトどうしであればtrueを返し、そうでない場合falseを返します。
  • ==での文字列の比較は、参照先が同じかどうかの比較を行います。
    →この場合、値が同じでも参照先が異なる場合はfalseになります。
  • 英字の大文字と小文字を区別します。同じ値でもfalseになります。
  • a.equals(b)のときでaがnullの場合は、NullPointerExceptionが発生するので注意が必要です。
    →bがnullの場合はfalseを返しエラーになりません。
    →対策としてはaがnullかif文で判定しnullの場合はequalsメソッドを実行しない、または後述のApacheのequalsメソッドを使用します。
  • 以下はOracleのJava8のStringクラスのequalsメソッドのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#equals-java.lang.Object-

equalsメソッドのサンプルです。

package test1;
 
public class Test1 {
	public static void main(String[] args) {

		// equalsで比較。値が同じなのでtrueになる。
		String a1 = "あいう";
		String a2 = "あいう";
		if (a1.equals(a2)) {
			System.out.println("OK"); // OKが出力される
		} else {
			System.out.println("NG");
		}
		
		// ==で比較。値は同じだが参照先が異なっているのでfalseになる。
		String e1 = new String("あいう");
		String e2 = new String("あいう");
		if (e1 == e2){
			System.out.println("OK");
		} else {
			System.out.println("NG"); // NGが出力される
		}
		
		// 値が異なる場合
		String b1 = "あいう";
		String b2 = "かきく";
		if (b1.equals(b2)) {
			System.out.println("OK"); 
		} else {
			System.out.println("NG"); // NGが出力される
		}
		
		// 値は同じだがデータ型が異なる場合
		String c1 = "1";
		int c2 = 1;
		if (c1.equals(c2)) {
			System.out.println("OK");
		} else {
			System.out.println("NG"); // NGが出力される
		}
		
		// 英字の大文字と小文字は区別される
		String d1 = "ABC";
		String d2 = "ABc";
		if (d1.equals(d2)) {
			System.out.println("OK");
		} else {
			System.out.println("NG"); // NGが出力される
		}
	}
}

9行目は、String型のインスタンスどうしでかつ同じ値のためtrueになります。
18行目は、イコール(==)での比較です。参照先が異なるのでfalseになります。
new String("文字列")は、新たなインスタンス(場所が異なる)を生成します。

equalsメソッドで比較する値がnullまたは空文字の場合どうなる?は以下を参照下さい。
Java equalsでnullまたは空文字を比較するサンプル

 

文字列の値を比較する(Apacheのequalsメソッド)

public static boolean equals(CharSequence cs1,CharSequence cs2)
  • Apache Commons LangライブラリのStringUtilsクラスのequalsメソッドを使用する方法です。
  • 比較するどちらの値がnullの場合でもNullPointerExceptionが発生しません
    →Javaのequalsメソッドとの違いです。
  • 英字の大文字と小文字を区別します。同じ値でもfalseになります。

StringUtilsクラスのequalsメソッドのサンプルです。

package test1;

import org.apache.commons.lang3.StringUtils;

public class Test1 {
	public static void main(String[] args) {
		// 値が同じ
		String a1 = "あいう";
		String a2 = "あいう";
		if (StringUtils.equals(a1,a2)) {
			System.out.println("true"); // trueが出力される
		}
		// 値が異なる
		String a3 = "あいう";
		String a4 = "かきく";
		if (StringUtils.equals(a3,a4)) {
		} else {
			System.out.println("false"); // falseが出力される
		}
		
		// 値がnull
		String str1 = null;
		String str2 = "abc";
		if (StringUtils.equals(str1,str2)) {
		} else {
			System.out.println("false"); // falseが出力される
		}
		
		// Stringのequalsメソッドの場合、実行時にNullPointerExceptionが発生
//		if (str1.equals(str2)) {
//			System.out.println("OK");
//		}
		
		// 英字の大文字と小文字は区別される
		String b1 = "ABC";
		String b2 = "ABc";
		if (StringUtils.equals(b1,b2)) {
			System.out.println("true");
		} else {
			System.out.println("false"); // falseが出力される
		}
	}
}

30行目は、Stringのequalsメソッドの場合で、a.equals(b)でaがnullの場合は実行時にNullPointerExceptionが発生します。

StringUtilsのライブラリの取得方法

1.StringUtilsのライブラリは、以下のApache Commons Langのダウンロードページにあります。
https://commons.apache.org/proper/commons-lang/download_lang.cgi

2.上記リンクからzipを取得して展開しjar(例:commons-lang3-3.9.jar)をビルドパスに追加してください。

jarファイルをEclipseのビルドパスに追加する方法?は以下を参照下さい。
Eclipse jarファイルをクラスパスに設定する方法

 

文字列の値を比較する(compareToメソッド)

public int compareTo(String anotherString)
  • 文字列が等しい場合は、数値の0を返します。
  • Stringオブジェクトの値と引数の文字列を、辞書的(Unicode値)に比較してStringオブジェクトの値が小さい場合は、0より小さい値を返します。
  • Stringオブジェクトの値と引数の文字列を、辞書的(Unicode値)に比較してStringオブジェクトの値が大きい場合は、0より大きい値を返します。
  • 英字の大文字と小文字を区別します。同じ値でもfalseになります。
  • 以下はOracleのJava8のStringクラスのcompareToメソッドのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#compareTo-java.lang.String-

compareToメソッドのサンプルです。

package test1;

public class Test1 {
	public static void main(String[] args) {
		// 値が同じ
		String a1 = "あいう";
		String a2 = "あいう";
		if (a1.compareTo(a2)==0) {
			System.out.println("OK"); // OKが出力される
		} else {
			System.out.println("NG");
		}
		// 値が異なる
		String b1 = "あいう";
		String b2 = "かきく";
		if (b1.compareTo(b2)==0) {
			System.out.println("OK"); 
		} else {
			System.out.println(b1.compareTo(b2)); // -9が出力される
		}
		// 値が異なる
		String b3 = "かきく";
		String b4 = "あいう";
		if (b3.compareTo(b4)==0) {
			System.out.println("OK"); 
		} else {
			System.out.println(b3.compareTo(b4)); // 9が出力される
		}
	}
}

8行目は、値が同じなのでcompareToメソッドは、0を戻します。
16,24行目は、値が異なるのでcompareToメソッドは、0以外を戻します。

 

大文字と小文字を区別せず比較する(equalsIgnoreCaseメソッド)

public boolean equalsIgnoreCase(String anotherString)

equalsIgnoreCaseメソッドのサンプルです。

package test1;

public class Test1 {
	public static void main(String[] args) {
		
		String a1 = "ABC";
		String a2 = "abc";

		// equalsIgnoreCaseメソッド
		System.out.println(a1.equalsIgnoreCase(a2));//true

		// equalsメソッド
		System.out.println(a1.equals(a2));//false
	}
}

10行目は、equalsIgnoreCaseメソッドで大文字と小文字の値を比較してtrueを返しています。
13行目は、equalsメソッドで大文字と小文字の値を比較してfalseを返しています。

関連の記事

Java equalsでnullまたは空文字を比較するサンプル
Java isEmpty 空文字を確認する(StringUtils)

△上に戻る