20130202
Javaの話
String str1 = new String("hoge");
String str2 = new String("hoge");
System.out.println(str1 == str2); //falseを返す
これはよく知られている話
"=="は変数に代入された値を比較するのだが, str1, str2にはそれぞれ
Stringクラスのインスタンス, つまりそれぞれ文字列"hoge"のメモリ上の位置が代入されている
メモリ上の位置がそれぞれ異なっているので上のprintlnは常にfalseを返す
そこで, 文字列の比較にはequals()という関数を使ってあげる
System.out.println(str1.equals(str2)); //true
equalsはメモリ上の位置ではなくオブジェクトの中身を比較する
"hoge" == "hoge"よりtrueが帰る
じゃあ定数と比べるときは次のどちらが良い書き方だろう
1. str1.equals("hoge")
2. "hoge".equals(str1)
なんとなく1で書いている人が多いのではないだろうか
1の場合, もしstr1がnullだった場合にはequalsというメソッドは
もちろん存在しないのでExceptionが発生する
一方2の場合は"hoge"というオブジェクトにはequalsメソッドがあるため
たとえstr1がnullでも"hoge"とnullの比較でExcptionは発生しない
1の書き方を使うとすると
if (str1 !== null && str1.equals("hoge")) { }
またはtry catchで囲むという方法はあるが, 無駄な処理をなくすために
2の書き方をしてみてはどうだろうか
基礎的な内容でした