今回は文字列の比較について記事にしていと思います。
- 基本的な文字列の比較方法
Javaでは、== 演算子と .equals() メソッドを使って文字列の比較ができますが、これらには重要な違いがあります。
== 演算子による比較
== 演算子は、オブジェクトの「参照」を比較します。つまり、2つの文字列が同じメモリ上の場所を指しているかどうかをチェックします。
String str1 = "Hello";
String str2 = "Hello";
if (str1 == str2) {
System.out.println("同じオブジェクトです");
} else {
System.out.println("異なるオブジェクトです");
}
この例では、str1 と str2 は同じ文字列リテラル "Hello" を参照しているので、== は true を返します。しかし、新しく作成されたオブジェクトの場合、たとえ内容が同じでも==演算子は false を返す可能性があります。
java
String str1 = new String("Hello");
String str2 = new String("Hello");
if (str1 == str2) {
System.out.println("同じオブジェクトです");
} else {
System.out.println("異なるオブジェクトです");
}
この場合、str1 と str2 は異なるオブジェクトとして作成されているため、== の比較結果は false になります。
.equals() メソッドによる比較
.equals() メソッドは、文字列の内容自体を比較します。== 演算子のように参照を比較するのではなく、文字列の中身が同じかどうかをチェックするため、文字列の値を比較する際にはこちらを使用するのが正しい方法です。
String str1 = new String("Hello");
String str2 = new String("Hello");
if (str1.equals(str2)) {
System.out.println("同じ内容の文字列です");
} else {
System.out.println("異なる内容の文字列です");
}
この場合、str1 と str2 の内容が同じ "Hello" なので、equals() は true を返します。
- 大文字と小文字を無視した比較
Javaでは、文字列の大文字・小文字を無視して比較したい場合があります。その場合は、equalsIgnoreCase() メソッドを使います。このメソッドは、大文字と小文字の違いを無視して文字列の内容を比較します。
String str1 = "hello";
String str2 = "HELLO";
if (str1.equalsIgnoreCase(str2)) {
System.out.println("大文字小文字を無視して、同じ内容の文字列です");
} else {
System.out.println("内容が異なります");
}
この例では、str1 と str2 は異なる大文字・小文字の組み合わせですが、equalsIgnoreCase() を使うことで、両方とも同じ内容とみなされて true を返します。
- 文字列の順序を比較する
文字列の順序を比較する場合は、compareTo() メソッドを使います。このメソッドは、2つの文字列を辞書順(アルファベット順)で比較します。
結果が 0 の場合、2つの文字列は同じです。
結果が正の値(例: 1)の場合、最初の文字列が辞書順で後に続きます。
結果が負の値(例: -1)の場合、最初の文字列が辞書順で前に来ます。
String str1 = "apple";
String str2 = "banana";
int result = str1.compareTo(str2);
if (result == 0) {
System.out.println("同じ文字列です");
} else if (result < 0) {
System.out.println("str1はstr2より前にあります");
} else {
System.out.println("str1はstr2より後にあります");
}
この場合、"apple" は "banana" よりも辞書順で前に来るため、compareTo() は負の値を返します。
- Nullの取り扱い
文字列を比較する前に、null の可能性も考慮することが重要です。equals() メソッドを使う場合、文字列が null の場合にエラーが発生しないように、先に null チェックを行うか、null の可能性がない側から equals() を呼び出すのが安全です。
String str1 = null;
String str2 = "Hello";
if (str2.equals(str1)) {
System.out.println("同じ内容の文字列です");
} else {
System.out.println("内容が異なります");
}
この例では、str2 の側から equals() を呼び出しているので、str1 が null でもエラーは発生しません。
まとめ
Javaで文字列を比較する方法は、状況によって使い分ける必要があります。
==: オブジェクトの参照が同じかどうかを比較(基本的に使わない)。
.equals(): 文字列の内容が同じかどうかを比較(最も一般的)。
.equalsIgnoreCase(): 大文字・小文字を無視して文字列を比較。
compareTo(): 文字列の順序を比較。
nullチェック: 比較前に null の可能性を考慮。
今回は文字列の比較について記事にしてみました。