一般的な言語で文字列の比較をする時には「==」で比較することが多いですが、Javaで文字列どうしを比較するにはこの方法だと正しく比較されません。
以下は「==」で比較するダメな例です。
実行例を分かりやすくするために敢えてnew Stringで生成しています。
文字列どうしを比較する(ダメな例)
1 2 3 4 5 6 7 8 9 |
String a = new String("hoge"); String b = new String("hoge"); //文字を比較する(NG) if(a == b){ System.out.println("同じ値です"); }else{ System.out.println("違う値です"); } |
- (結果)
- 違う値です
上記の方法で比較すると、値が同じかどうかの比較ではなく、変数の参照先が同じかどうかという比較になるためNGです。
(ただ、文字列の定義は通常「String a = "hoge";」みたいにしますが、このような場合、参照先に同じ値があると参照先を共有するので、多くの場合うまく判定できてしまうのが厄介なのですが・・)
正しく文字列の値を比較するには、.equals を使用します。
文字列どうしを比較する(OKな例)
1 2 3 4 5 6 7 8 9 |
String a = new String("hoge"); String b = new String("hoge"); //文字を比較する(OK) if(a.equals(b)){ System.out.println("同じ値です"); }else{ System.out.println("違う値です"); } |
- (結果)
- 同じ値です
まとめ
- String型の値を比較する場合は必ず、.equalsメソッドを使用しましょう。