ENTRANCE

都内でエンジニアやってます。主にRubyとJavaを書いて遊んでる人のブログ。楽しくのんびりとがモットー。

【Java】Enumとequalsと==と

Enumの比較は==を使えってことらしい。

こんにちは!かっつんです!

みなさん、Enum使ってますか?
私はEnum大好きです!

そんなEnumを比較するときは==を使えって聞いたことがあるから
なぜ==演算子を使うのか調べてみました!

1. equals == ==ってまじかよ。

Enumのequalsの内部実装をみてみた。

    /**
     * Returns true if the specified object is equal to this
     * enum constant.
     *
     * @param other the object to be compared for equality with this object.
     * @return  true if the specified object is equal to this
     *          enum constant.
     */
    public final boolean equals(Object other) {
        return this==other;
    }

いや、==じゃん。もろに。
==の勝ちですね!文字数も少ないし...

2. ヌルポ出るじゃん?

HogeEnum hoge = null;

if (hoge.equals(HogeEnum.HOGE)) { // NullPointerException出るね
}

equals使うとヌルポ出る可能性あるんですよね〜ってことで、==の勝ち。

HogeEnum hoge = null;

if (HogeEnum.HOGE.equals(hoge)) { // ヌルポ出ないね。
}

こんな感じで書けば、そもそもヌルポ出ないんだけど、
==なら
hoge == HogeEnum.HOGEでもHogeEnum.HOGE == hogeでも
ヌルポ出ないから勝ちです。

3. みんな大好きな型に守られる

String hoge = "hoge";

if (HogeEnum.HOGE.equals(hoge)) { // コンパイルエラー出ません。IDEが警告くらいは出してくれます。多分。
}


if (HogeEnum.HOGE == hoge) { // コンパイルエラーです。
}

==コンパイルエラー出してくれるんですよ。嬉しいですね。
==の勝ちです。

まとめ

JavaEnumの比較は、==を使った方が良い!

docs.oracle.com