【Java】Enumとequalsと==と
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) { // コンパイルエラーです。 }
==
はコンパイルエラー出してくれるんですよ。嬉しいですね。
==
の勝ちです。