文字列.equals() / equalsIgnoreCase() / compareTo()
| 対応: | Java 1.0(1996) |
|---|
文字列が等しいかどうかを比較したり、辞書順での大小を比較したりするメソッドです。Javaでは == 演算子はオブジェクトの参照を比較するため、文字列の内容を比較するには必ず『equals()』を使用してください。
構文
// 文字列の内容が等しいかどうかを比較します 文字列.equals(Object anObject); // 大文字・小文字を区別せずに比較します 文字列.equalsIgnoreCase(String anotherString); // 辞書順で比較し、差分を整数で返します 文字列.compareTo(String anotherString); // 大文字・小文字を区別せずに辞書順で比較します 文字列.compareToIgnoreCase(String str);
メソッド一覧
| メソッド | 概要 |
|---|---|
| equals(Object anObject) | 文字列の内容が等しい場合は true、そうでない場合は false を返します。 |
| equalsIgnoreCase(String anotherString) | 大文字・小文字を区別せずに文字列を比較します。等しければ true を返します。 |
| compareTo(String anotherString) | 辞書順で比較します。等しければ 0、呼び出し元が小さければ負の整数、大きければ正の整数を返します。 |
| compareToIgnoreCase(String str) | 大文字・小文字を区別せずに辞書順で比較します。 |
サンプルコード
sample_StringEqualsCompareto.java
class StringEqualsCompareto {
public static void main(String[] args) {
// equals() で文字列の内容を比較します
String a = "Java";
String b = "Java";
System.out.println(a.equals(b)); // 『true』と出力されます。
// == は参照を比較するため意図しない結果になる場合があります
String c = new String("Java");
System.out.println(a == c); // 『false』と出力されます。
System.out.println(a.equals(c)); // 『true』と出力されます。
// equalsIgnoreCase() で大文字・小文字を区別せずに比較します
System.out.println("JAVA".equalsIgnoreCase("java")); // 『true』と出力されます。
// null チェックを先に行ってから equals() を呼び出します
String input = null;
System.out.println("Java".equals(input)); // 『false』と出力されます。(NullPointerException を回避できます)
// compareTo() で辞書順を比較します。戻り値は正・負・ゼロの符号で判定します(正確な数値はJVM実装依存)
System.out.println("綾波レイ".compareTo("碇シンジ")); // 正の値が出力されます。(綾波レイ の方が辞書順で後)
System.out.println("NERV".compareTo("NERV")); // 『0』と出力されます。
// ソートの基準として使用できます
java.util.List<String> langs = new java.util.ArrayList<>(java.util.Arrays.asList("Python", "Java", "C", "Swift"));
langs.sort(String::compareTo);
System.out.println(langs); // 辞書順に並び替えられたリストが出力されます。
}
}
StringEqualsCompareto.java
javac StringEqualsCompareto.java java StringEqualsCompareto true false true true false 1330 ← 任意の正の整数(JVM実装依存。符号のみで判定してください) 0 [C, Java, Python, Swift]
概要
Javaで文字列を比較する際は == ではなく必ず『equals()』を使ってください。== はオブジェクトの参照(メモリアドレス)を比較するため、同じ内容の文字列でも new String() で生成した場合は false になります。文字列リテラルのみを使う場合は == が偶然 true になることもありますが、これは文字列プールの仕組みによるものであり、意図的に利用すべきではありません。
また、比較元が null の可能性がある場合は null.equals(...) を呼び出すと NullPointerException が発生します。文字列リテラルを左側に書く(例: "Java".equals(input))か、Objects.equals(a, b) を使うと安全です。
文字列の大文字・小文字変換には『toUpperCase() / toLowerCase()』、数値との変換には『String.valueOf()』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。