Javaで文字列を比べる方法まとめ:equals・==・compareTo・equalsIgnoreCaseの違いをやさしく解説!

Java

はじめに

Javaの学習中、「文字列の比較がうまくいかない」「==で比較したのに合ってない」といった経験をしたことはありませんか?

文字列の比較は、Java初心者がよくつまずくポイントです。この記事では、Javaで文字列を比べる正しい方法とその違い・使い方を、わかりやすく丁寧に解説します。


1. 「==」と「equals()」の違いを知ろう

「==」は“同じものを見ているか”をチェック

Javaで==を使うと、文字列の中身ではなく、参照先(メモリ上の場所)が同じかどうかを比較します。

String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1 == str2); // true(同じリテラルを使っているため)

String str3 = new String("Hello");
System.out.println(str1 == str3); // false(newで新しく作られたため)

「equals()」は“中身の内容”を比較

文字列の内容が同じかどうかを比較する場合は、**equals()**を使います。

System.out.println(str1.equals(str3)); // true(中身は同じ)

結論:

  • == → 参照先が同じか?
  • equals() → 内容が同じか?

2. 大文字・小文字を無視して比較する:equalsIgnoreCase()

String a = "Java";
String b = "java";

System.out.println(a.equals(b)); // false
System.out.println(a.equalsIgnoreCase(b)); // true

このように、大文字・小文字を区別せずに比較したいときには、equalsIgnoreCase()が便利です。


3. compareTo()で辞書順に比較する

compareTo()は、文字列を**辞書順(アルファベット順)**で比較します。

System.out.println("Apple".compareTo("Banana")); // 負の値(Appleが先)
System.out.println("Banana".compareTo("Apple")); // 正の値
System.out.println("Apple".compareTo("Apple")); // 0(同じ)

数値の結果によって並び替えや判定が可能です。


4. null安全に比較する:Objects.equals()

nullと比較する場合、equals()だとNullPointerExceptionが出る可能性があります。

String a = null;
String b = "test";

// System.out.println(a.equals(b)); // NPE発生
System.out.println(Objects.equals(a, b)); // false(安全)

Objects.equals()を使えば、どちらかがnullでも安全に比較可能です。


5. 部分一致や正規表現を使った比較

startsWith()/endsWith()

String url = "https://example.com";

System.out.println(url.startsWith("https")); // true
System.out.println(url.endsWith(".com")); // true

matches():正規表現で一致判定

String email = "test@example.com";
System.out.println(email.matches(".*@.*\\.com")); // true

6. 間違いやすい比較パターンと注意点

リテラルとnewの違い

String a = "Java";
String b = new String("Java");

System.out.println(a == b); // false(newで別インスタンス)
System.out.println(a.equals(b)); // true

文字列プールとヒープの違いを理解する

リテラル文字列はJavaの「文字列プール」に格納され、==でもtrueになることがありますが、newで生成した文字列はヒープに格納されるため、==ではfalseになります。


7. 実践コード例まとめ

String a = "Hello";
String b = "Hello";
String c = new String("Hello");
String d = "hello";

// == 比較
System.out.println(a == b); // true
System.out.println(a == c); // false

// equals 比較
System.out.println(a.equals(c)); // true

// equalsIgnoreCase
System.out.println(a.equalsIgnoreCase(d)); // true

// compareTo
System.out.println(a.compareTo("World")); // 負の値

// null安全な比較
String e = null;
System.out.println(Objects.equals(e, a)); // false

8. 使い分けガイド

比較方法使う場面備考
==文字列の参照(アドレス)が同じか?内容比較には不向き
equals()文字列の内容が同じか?基本の比較方法
equalsIgnoreCase()大文字・小文字を無視したいときメールアドレスなど
compareTo()辞書順を調べたいときソート処理などに便利
Objects.equals()nullが混じっているかも?null安全な比較が可能

9. 学習の進め方とおすすめの次ステップ

文字列の比較は、プログラムを書くうえで毎日のように使います。ミスを減らすには、まずは正しい使い分けをしっかり覚えることが大切です。

そのためにまずは「絶対にJavaプログラマーになりたい人へ。」を読んで、基本をしっかり学びましょう。そして、実践的なコードレビューや転職支援を受けたい方は「サイゼントアカデミー」のサポートを活用するのが近道です!


まとめ

  • ==equals() は意味がまったく違う!
  • 中身を比べるなら equals()、nullが不安なら Objects.equals()
  • 辞書順は compareTo()、大文字小文字無視は equalsIgnoreCase()
  • 慣れていないうちは、常に「どの比較方法がふさわしいか」を意識しよう!

コメント

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