Enum это объект, как и все в Java. Однако это особенный объект. Каждый из объектов енума создаётся только единожды. Давайте на примере:
enum TestEnum {ONE, TWO, THREE}
Если мы создадим 10 переменных TestEnum.ONE
, то все они будут ссылаться на один и тот же объект. И поэтому enum можно сравнивать с помощью ==
и это корректно и будет работать.
Сторонники такого подхода называют следующие преимущества. Давайте их разберем.
Вы никогда не получите NullPointerException
. И это правда, но если вы будете придерживаться правила "Сравнение константы слева", то и при использовании .equals()
NullPointerException
вам не страшен.
Оператор ==
работает быстрее. Быстрее чего? Видимо метода .equals()
. Давайте посмотрим реализацию метода .equals()
у enum.

Оператор ==
более понятный синтаксически. Это еще почему? Для сравнения объектов в Java используется .equals()
. Enum это объект. Логичнее и очевиднее использовать .equals()
для сравнения, чтобы не нарушать единообразие сравнения объектов.
На мой взгляд, правильнее использовать .equals()
, главное не забывать о правиле "Сравнение константы слева".