Ich weiß, dass Java-Enums zu Klassen mit privaten Konstruktoren und einer Reihe von öffentlichen statischen Mitgliedern kompiliert werden. Wenn ich zwei Mitglieder einer gegebenen enum vergleiche, habe ich immer .equals()
z.B.
public useEnums(SomeEnum a)
{
if(a.equals(SomeEnum.SOME_ENUM_VALUE))
{
...
}
...
}
Ich bin jedoch gerade auf einen Code gestoßen, der den Gleichheitsoperator verwendet ==
anstelle von .equals():
public useEnums2(SomeEnum a)
{
if(a == SomeEnum.SOME_ENUM_VALUE)
{
...
}
...
}
Welchen Operator sollte ich verwenden?
7 Stimmen
Ich bin gerade über eine sehr ähnliche Frage gestolpert: stackoverflow.com/questions/533922/
73 Stimmen
Ich bin überrascht, dass in all den Antworten (insbesondere in der von polygenelubricants, die detailliert erklärt, warum == funktioniert) ein weiterer großer Vorteil von == nicht erwähnt wurde: dass es explizit macht, wie Enums funktionieren (als eine feste Menge von Singleton-Objekten). Bei equals könnte man meinen, dass es irgendwie mehrere Instanzen der gleichen Enum-'Alternative' geben kann.
3 Stimmen
SomeEnum.SOME_ENUM_VALUE.equals(a) löst niemals eine NullPointerException aus, während a.equals(SomeEnum.SOME_ENUM_VALUE) dies möglicherweise tut.