なんも考えずに"リテラル".equals(s)と書け

"".equals(stringVariable) は改悪だろうについて。
まず、空文字との比較は場合による。というか、空文字との比較なら

s != null && s.isEmpty()

s == null || s.isEmpty()

などと書くほうがいい。
あと、件の問題は改悪とは言わないまでも、問題文だけをみてこれを改善といえるほどでもないので、あまり良くない。


中身があるリテラルとの比較。
基本的な方針として「二通りの書き方があるとして、実行コストや記述コストが同じならより安全で判断の必要がない書き方を選ぶべき」というのがある。というか、これはコードの書き方だけではなく、すべての行動にあてはまる。判断不要で安全な方法があるのなら、それを選ぶべきだ。シャワーをまっすぐにシャワー置きにかけずに横向きにかけるというのは、これにあてはまる。確かにシャワー置きにはシャワーをまっすぐ置きたい。「水栓をひねるときに水がシャワーからでるか蛇口から出るか確認すればいいだけ」という言い方もできるけど、やはりたまに確認を忘れる。そして確認を忘れたときに限ってシャワーから水が出る。シャワーを「必ず」横向きに置くようにすれば、判断の必要はなく、水栓をひねって水を浴びることもない。
「こちらのほうが美しい」という理由よりも、「こちらのほうが安全」という理由で書き方を選んだほうがいい。こういった細かい選択がプログラムの信頼性をあげていく。


nullチェックは別にするべきだ、というなら、nullチェックは別にして、さらに"リテラル".equals(s)という書き方をしたほうがいい。
NullPointerExceptionが出ればヌルチェックされるべきものが抜けていることに気づけたのに」という意見もあったけど、"リテラル".equals(s)と書いたときにnullが条件からはずれて困ることはほぼない。それに、これはプログラムを書く人の理論で、使う側からすればプログラムのチェックをそんなところでやられても困る。運用に入ったなら実際にsがnullであってはいけないときまでNullPointerExceptionへの遭遇は先延ばしにするべきだ。


プログラムは、結局動いてナンボで、動きの違いが最優先であって、記述の美しさや自分とのポリシーの違いは、目をつぶったほうがいい。
ブログで「s.equals("リテラル")の方が美しいよね!」といいながらも、実際のコードでは、やはりより安全な"リテラル".equals(s)という書き方をするのがプログラマとして良いと思う。
もしくは、「自分はどんなに疲れてても急いでいても眠くてもやる気がなくても確実にnullチェックを行う自信があるからs.equals("リテラル")と書くが、諸君ら凡人は"リテラル".equals(s)と書きたまえ」というほうがカッコイイ。