本当によく蒸し返される話だと思う。
本題とそれるけど、ついでに言及しておきたいことがあるので書いておく。
個人的には null が右辺の場合は false を返すのに、左辺にきた場合にヌルポを投げてしまうという非対称性が気持ち悪いから、何とかしたいという気持ちから、バイナリメソッドを用意することが理想だと思っているのだけど、実際に使うとなるとそれはそれで面倒くさいんだろうな。
自分は "foo".equals(s) 派で、その理由はやはりヌルポが投げられたらうっとうしいからである。*1
実は元ネタ (おそらく ココ から始まっていると思われる、コメントおよび一連のトラックバック) をいろいろと読んでいるうちに「s と "foo" って、どっちも同じ立場じゃない?」「むしろ、自分の中では第三者が s と "foo" を比べるイメージだから strcmp 的な (引数の順序が意味を持たない) 記述の方が直観的では?」ってのを感じていて、String クラスに static なメソッド equals(String, String) があれば、
四角い仁鶴が丸く治まるんじゃないかと思っていたら、上記の記事を発見した次第。
equals のように自分と同じ型のオブジェクトを引数にとるメソッドをバイナリメソッドと呼ぶのは知らなかったから、勉強になった。
*1:この当時の自分はこれが正解だと思ってた。