"String==String"のお話
先日(8/8)のエントリを、Isoparametricさんに引用していただきました。
言語仕様をも変えてしまうなら、Stringだけじゃなくて、Objectも含めてそうしてしまうのが良かったかも。
if (o1 == o2) { // 内容が等しい場合 }
は、
// どちらかがnullなら常にfalseにしたい if (o1 != null && o2 != null && o1.equals(o2)) { // 内容が等しい場合 }
の構文糖にして、従来のインスタンスが等しいかどうかは、
if (o1 sameinstanceas o2) { // インスタンスが等しい場合 }
とかにする。"==="にしようと思ったけど、タイプミスが頻発しそうなので。(とは言え、"sameinstanceas"は長すぎますね。"instanceof"に倣ってみたんですが。)
しかしながら、String.equals(String)はJavaに深く根ざしてしまっているので、いまさら変えようが無いでしょう。APIなら、今更"isEmpty()"が登場したように、言語仕様としての下位互換は保たれるので、前回のようなクラスメソッドがあれば、と思ったのです。というか、自分ではユーティリティでそれをやっています。
あと、たぶんバッドノウハウなのでおすすめしませんが、
if (String.valueOf(s1).equals(s2)) { // 同じ文字列 }
とすれば、NullPointerExceptionは回避できます。但し、s2が"null"という文字列だった場合は、trueになってしまうという欠点があります。