Java 文字列の値を比較する(equals/compareTo)

Javaの文字列の値を比較するサンプルです。

目次

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

public boolean equals(Object anObject)
  • 値が等しくStringオブジェクトどうしであればtrueを返し、そうでない場合falseを返します
  • ==での文字列の比較は、参照先が同じかどうかの比較を行ってしまいます。
    →値を比較するときはequalsメソッドを使用します。
  • 英字の大文字と小文字を区別します。同じ値でもfalseになります。
  • 以下は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) {

		// 値が同じ
		String a1 = "あいう";
		String a2 = "あいう";
		if (a1.equals(a2)) {
			System.out.println("OK"); // OKが出力される
		} else {
			System.out.println("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が出力される
		}
		
		// ==での比較。参照先が異なっているのでfalseになる
		String e1 = new String("あいう");
		String e2 = new String("あいう");
		if (e1 == e2){
			System.out.println("OK");
		} else {
			System.out.println("NG"); // NGが出力される
		}
	}
}

9行目は、String型のインスタンスどうしでかつ同じ値のためtrueになります。
18行目は、値が異なるためfalseになります。
27行目は、同じ値だが、データ型が異なるためfalseになります。
36行目は、同じ値ですが英字の小文字が入っているためfalseになります。
45行目は、イコール(==)での比較です。参照先が異なるのでfalseになります。

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

 

文字列の値を比較する(Apacheのライブラリを使用)

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が出力される
		}
		
		// 英字の大文字と小文字は区別される
		String b1 = "ABC";
		String b2 = "ABc";
		if (StringUtils.equals(b1,b2)) {
			System.out.println("true");
		} else {
			System.out.println("false"); // falseが出力される
		}
	}
}

10行目は、値が一致するのでtrueになります。
16行目は、値が不一致なのでfalseになります。
24行目は、値は同じですが、小文字があるのでfalseになります。

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

1.StringUtilsのライブラリは、以下のApache Commons Langのダウンロードページにあります。
http://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 if文のサンプル
Java 値が空文字か確認する(isEmpty/StringUtils)
Java 数値と文字列の変換のサンプル(valueOf)

△上に戻る