You、==もSyntax SugerにしちゃいなYO!(紅い人風)

odzさんが、

しかし、「+」 を使った文字列連結の Syntax Suger があるんだから、equals も Syntax Suger にすればよかったのにと、と割と本気で思う。

定数との比較 #3 - odz buffer

と言われていて同意。

どうせStringは+や+=は特別扱いなのだし、
==も使い道がない(混乱を招く)わけだからして、
Stringの==は
lhs == rhsを

(lhs is null) ? (rhs is null) : lhs.equals(rhs)

にしてしまうのは、ナイスなんじゃないかなあ。

コメント欄で言及されているとおり、
サブクラスとのインスタンスとの比較は諦めても支障がない、
と考えてしまうので。

ちょっといびつな印象はあるかもしれませんんが、元々特別扱いなのだしねえ。


これでargiusさんのこんなメソッドがあれば良かったのに問題も解決。

こんなメソッドがあれば良かったのに、といつも思います。

public static boolean equals(String s1, String s2) {
    if (s1 == null || s2 == null) {
        return false;
    }
    return s1.equals(s2);
}
"string".equals(String)がキライ - argius note

ていうか、Javaって

        String s = "hoge";
        if (s == "hoge") {
        ... 
        }

はtrueを返すのに、(immutableでインスタンスが同じだから)

        String ss = "ho";
        ss += "ge";
        if (ss == "hoge") {
        ...
        }

はfalseなのかよ、って思いますよね……。