digital-garden/dev/java/Сравнение enum в Java.md

42 lines
2.7 KiB
Markdown
Raw Normal View History

2024-09-06 17:05:53 +03:00
---
aliases:
tags:
- maturity/🌱
2024-09-27 20:25:32 +03:00
- content/opinion
2024-09-08 00:56:18 +03:00
date: 2023-11-20
2024-09-06 17:05:53 +03:00
zero-link:
- "[[../../meta/zero/00 Java разработка|00 Java разработка]]"
parents:
linked:
2024-09-06 17:05:53 +03:00
---
Enum это объект, как и все в Java. Однако это особенный объект. Каждый из объектов enum создаётся только единожды. Давайте на примере:
2024-09-06 17:05:53 +03:00
```java
enum TestEnum {ONE, TWO, THREE}
```
Если мы создадим 10 переменных `TestEnum.ONE`, то все они будут ссылаться на один и тот же объект. И поэтому enum можно сравнивать с помощью `==` и это корректно и будет работать.
2024-09-06 17:05:53 +03:00
Сторонники такого подхода называют следующие преимущества. Давайте их разберем.
**Вы никогда не получите `NullPointerException`.** И это правда, но если вы будете придерживаться правила ["сравнение константы слева"](Сравнение%20константы%20слева%20в%20Java.md), то и при использовании `.equals()` `NullPointerException` вам не страшен.
2024-09-06 17:05:53 +03:00
**Оператор == работает быстрее.** Быстрее чего? Видимо метода `.equals()`. Давайте посмотрим реализацию метода `.equals()` у enum.
2024-09-06 17:05:53 +03:00
![](../../meta/files/images/Pasted%20image%2020231120093026.png)
**Оператор == более понятный синтаксически.** Это еще почему? Для сравнения объектов в Java используется `.equals()`. Enum это объект. Логичнее и очевиднее использовать `.equals()` для сравнения, чтобы не нарушать единообразие сравнения объектов.
2024-09-06 17:05:53 +03:00
На мой взгляд, правильнее использовать `.equals()`, главное не забывать о правиле "[Сравнение константы слева](Сравнение%20константы%20слева%20в%20Java.md)".
***
## Мета информация
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2023-11-20]]
### Дополнительные материалы
-
### Дочерние заметки
2024-09-14 23:38:42 +03:00
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->