Stringのequalsの書き方

 先輩に言われて気付いた。

String s;
~中略~
という状況で、

1.
if(s.equals("hoge")){};

2.
if("hoge".equals(s)){};

と書くことの違いは何でしょう、と。
正解は、
1.だとsがnullのときにNullPointerExceptionが出る、が2.ではそれが出ない、でした!

null.equalsと書いてしまえばそりゃあ当然ぬるぽが出てしまうというのは、
確かに考えればわかることなんだけど、それを考えたことはなかった、、、。

ただ、じゃあ、こう書くのがより望ましいのかというとそれは必ずしもそうではないみたい。
というのは、sが"hoge"と一致するかを確認したいのだから、
条件としてはs.equalsと書いた方が自然な英語になって可読性があがるわけ。

だから、より望ましいのは、この条件文以前に、nullチェックをして、
nullがこないことを保証した上でs.equalsと書く1.がいい、と。
そしてnullチェックしないなら、2.の方がerror抑制が出来て良い(ことが多い)、ってね。

Javaを始めたばかりの頃から、それなりに馴染みのあるmethodだけど、
きちんと使おうとして考えると、意外と奥が深いんだなあ...

参考までに。
Remove all ads