digital-garden/dev/java/Сравнение enum в Java.md
Struchkov Mark 442e4f6378
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Проверка работы времени
2024-09-07 12:43:43 +03:00

2.3 KiB
Raw Blame History

aliases tags date zero-link parents linked article
maturity/🌱
type/opinion
2023-11-20
../../meta/zero/00 Java разработка
https://note.struchkov.dev/sravnieniie-enum-v-java/

Enum это объект, как и все в Java. Однако это особенный объект. Каждый из объектов enum создаётся только единожды. Давайте на примере:

enum TestEnum {ONE, TWO, THREE}

Если мы создадим 10 переменных TestEnum.ONE, то все они будут ссылаться на один и тот же объект. И поэтому enum можно сравнивать с помощью == и это корректно и будет работать.

Сторонники такого подхода называют следующие преимущества. Давайте их разберем.

Вы никогда не получите NullPointerException. И это правда, но если вы будете придерживаться правила "сравнение константы слева", то и при использовании .equals() NullPointerException вам не страшен.

Оператор == работает быстрее. Быстрее чего? Видимо метода .equals(). Давайте посмотрим реализацию метода .equals() у enum.

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

На мой взгляд, правильнее использовать .equals(), главное не забывать о правиле "Сравнение константы слева".