記事内に広告が含まれています。

【Java】文字列と文字列の比較

Javaにおける文字列と文字列の比較について。比較演算子「==」とequals()メソッドの注意点です。

【スポンサーリンク】

確認用サンプル

文字列の比較は比較演算子「==」か、equals()メソッドで可能です。

public class StringCompare {
	public static void main(String[] args) {
		// 変数とリテラル
		String strA = "テスト";
		
		if (strA == "テスト") {
			System.out.println("strA == \"テスト\"         :同じ");
		} else {
			System.out.println("strA == \"テスト\"         :違う");
		}
		
		if (strA.equals("テスト")) {
			System.out.println("strA.equals(\"テスト\")    :同じ");
		} else {
			System.out.println("strA.equals(\"テスト\")    :違う");
		}
		
		
		// 変数と変数(リテラル同士)
		String strA2 = "テスト";
		String strB2 = "テスト";
		
		if (strA2 == strB2) {
			System.out.println("strA2 == strB2           :同じ");
		} else {
			System.out.println("strA2 == strB2           :違う");
		}
		if (strA2.equals(strA2)) {
			System.out.println("strA2.equals(strA2)      :同じ");
		} else {
			System.out.println("strA2.equals(strA2)      :違う");
		}
		
		
		// 変数と変数(リテラルとオブジェクト)
		String strA3 = "テスト";
		String strNew = new String("テスト");
		
		if (strA3 == strNew) {
			System.out.println("strA3 == strNew          :同じ");
		} else {
			System.out.println("strA3 == strNew          :違う");
		}
		if (strA3.equals(strNew)) {
			System.out.println("strA3.equals(strNew)     :同じ");
		} else {
			System.out.println("strA3.equals(strNew)     :違う");
		}
	}
}

結果はこんな感じです。

リテラルとオブジェクト(newしたStringの変数)を比較演算子「==」で判定すると、falseが返って来ます。

なので、比較演算子「==」とequals()メソッド、どっちがいいのと言われたら、個人的にはequals()メソッドをオススメします。

絶対にそうしろとは言わないのですが、equals()メソッドにも注意点があります。

【スポンサーリンク】

equals()メソッドが全てを解決する…?

ただし、equals()メソッドが万能かと言われるとそうではなくて、例えば、

String strA4 = null;
String strB4 = "テスト";

if(strA4.equals(strB4)) {
	System.out.println("strA.equals(strB4))   :同じ");
} else {
	System.out.println("strA.equals(strB4))   :違う");
}

の様に、nullの変数に対してequals()メソッドを呼び出した場合、NullPointerExceptionが発生してしまいます。残念ながらそういう仕様です。

なので、equals()メソッドを使いたい場合はnullチェックを事前に実施するか、nullを許容しない作りにするかを決めておく必要があります。

.