■
文字列の比較について。比較にはequalsを使いましょうってお話
equalsメソッドを使用する場合と==を使用すると違いが出ます。
equalsは中身を比較して、==はオブジェクトのアドレスを比較します。
以下の場合。
String str = "aaa"; String str2 = "aaa"; System.out.println(str == str2); System.out.println(str.equals(str2));
この場合、どちらもtrueが返ります。Stringは、immutableなので、同じ値を持ったオブジェクトが作成されず、示すオブジェクトは同じになるからです。ポインタで言えば、strもstr2も同じアドレス指します。
String str = "aaa"; String str2 = new String("aaa"); System.out.println(str == str2); System.out.println(str.equals(str2));
この場合、"aaa"を比較しているのに、==を使用するとfalse、equalsメソッド使用するとtrueが返ります。
Stringクラスは、immutableなのに、無理やりnewして、同じ値を持つが、異なるアドレス空間に保持されたオブジェクトを作成しているから起こる現象。
アドレスは異なるので、==はfalseだけど、中身は同じなので、equalsはtrue
結論
文字列の比較には、equalsを使いましょう。