Ich bevorzuge die Verwendung von ==
anstelle von equals
:
Ein weiterer Grund, zusätzlich zu den anderen, die hier bereits diskutiert wurden, ist, dass Sie einen Fehler einführen könnten, ohne es zu bemerken. Angenommen, Sie haben diese enums, die genau das gleiche ist, aber in getrennten Paketen (es ist nicht üblich, aber es könnte passieren):
Erste Aufzählung :
package first.pckg
public enum Category {
JAZZ,
ROCK,
POP,
POP_ROCK
}
Zweite Aufzählung:
package second.pckg
public enum Category {
JAZZ,
ROCK,
POP,
POP_ROCK
}
Dann nehmen wir an, Sie verwenden die Gleichheitszeichen wie folgt in item.category
das ist first.pckg.Category
aber Sie importieren die zweite Aufzählung ( second.pckg.Category
), sondern die erste, ohne es zu merken:
import second.pckg.Category;
...
Category.JAZZ.equals(item.getCategory())
Sie erhalten also immer false
due ist ein anderes enum, obwohl man true erwartet, weil item.getCategory()
es JAZZ
. Und es könnte ein bisschen schwierig zu sehen sein.
Wenn Sie also stattdessen den Operator ==
erhalten Sie einen Kompilierungsfehler:
Operator == kann nicht auf "zweite.pckg.Kategorie", "erste.pckg.Kategorie" angewendet werden
import second.pckg.Category;
...
Category.JAZZ == item.getCategory()
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.