なんか久しぶりにやらかしたので忘れないために。
初投稿がこんな記事でいいのだろうか。
#Javaの文字列比較について
Javaで二つの文字が一致するかどうか比較する場合は==演算子じゃなくてequalsメソッドを使うってのは、少しJava勉強すれば分かる事だし、調べればすぐ分かる。
(これから言う事だってさらに少し調べるだけで意外と出てきたりしますが…)
でも、大概どこいっても固定文字列と比較する場合はやっておいた方がいい(と私が思う)事が書かれてない事が多い。
自分でもこれどこで見たか忘れたくらいだけれど。
固定の文字は右か左か。
なんの事かと思うかもしれないが、固定の文字列と何が来るか分からないStringの変数を比較する場合、どちらを引数にするかで防げる事がある。
例えば、あるStringが送られてきてそれを特定の文字と比較する様な処理があった場合、下の例は少し問題がある。
例1)
public boolean isEqualsQiita(String str){
return str.equals("Qiita");
}
まぁ、単純すぎて見れば分かると思うが、引数で渡された文字列が"Qiita"かどうか確認する処理だ。
そして次が私がやった方がいいと思うやり方。
例2)
public boolean isEqualsQiita(String str){
return "Qiita".equals(str);
}
この二者はどちらが比較対象になるかの違いだけに見えて、大きな違いがある。
最初に挙げた例1では、引数のstrがnullだった場合にNullPointerExceptionが発生するのに対し、例2ではたとえnullがきたとしてもfalseが返るだけなのだ。
なるべく例外を発生させないプログラムを書こうとしたら、圧倒的に例2の方が優れているのは分かって頂けるのではないかと思う。
とか偉そうに述べながらも、自分もまだ染み付いてないせいか、これでエラー発生させるという事態が発生したので自戒の念も込めてorz
コメントを色々頂きまして追記
私自身最近は大分勉強が疎かでこんな記事でいいのかと思ってましたが、やはりもっと勉強しないとだめですね。
実際良く考えて、例2の状態は例えるなら、try,catchでエラーをキャッチしたものの、printStackTraceだけ出してエラー握りつぶしてる状態に近いかもしれません。
ちゃんと仕様を把握して、事前にnullチェックするなり、きちんとした対処をしましょう!