2014年2月9日日曜日

文字列が同じか判定する

2つの文字列が同じ文字列であるかを判定するにはString#equals()を使用します。Java以外のプログラミング言語では == 演算子で判定することができる場合が多いですが、Javaでは正しく動作しません。

コード例

public class Test {
    public static void main(String[] args) {
        String a1 = String.valueOf('a');
        String a2 = String.valueOf('a');
        if (a1.equals(a2)) {
            System.out.printf("matched");
        } else {
            System.out.printf("unmatched");
        }
    }
}

出力

mathched

なぜ==演算子で比較できないか

Javaではオブジェクトの==演算子は同一のオブジェクトであるかを示す演算子です。 文字列はString型というオブジェクトであり、intやcharのようなプリミティブ型ではないため==演算子は同一のオブジェクトである場合のみtrueとなります。 試しに上記のコード例を==演算子での比較に置き換えてみると結果が変わるのがわかります。