31 lines
2.2 KiB
Markdown
31 lines
2.2 KiB
Markdown
---
|
||
aliases:
|
||
tags:
|
||
- зрелость/🌱
|
||
date:
|
||
- - 2023-11-20
|
||
zero-link:
|
||
- "[[../../../garden/ru/meta/zero/00 Java разработка]]"
|
||
parents:
|
||
linked:
|
||
article: https://note.struchkov.dev/sravnieniie-enum-v-java/
|
||
---
|
||
Enum это объект, как и все в Java. Однако это особенный объект. Каждый из объектов енума создаётся только единожды. Давайте на примере:
|
||
|
||
```java
|
||
enum TestEnum {ONE, TWO, THREE}
|
||
```
|
||
|
||
Если мы создадим 10 переменных `TestEnum.ONE`, то все они будут ссылаться на один и тот же объект. И поэтому enum можно сравнивать с помощью == и это корректно и будет работать.
|
||
|
||
Сторонники такого подхода называют следующие преимущества. Давайте их разберем.
|
||
|
||
**Вы никогда не получите `NullPointerException`.** И это правда, но если вы будете придерживаться [правила](https://note.struchkov.dev/sravnitie-konstanty-slieva/) ["Сравнение константы слева"](https://note.struchkov.dev/sravnitie-konstanty-slieva/), то и при использовании `.equals()` `NullPointerException` вам не страшен.
|
||
|
||
**Оператор == работает быстрее.** Быстрее чего? Видимо метода `.equals()`. Давайте посмотрим реализацию метода `.equals()` у enum.
|
||
|
||
![](Pasted%20image%2020231120093026.png)
|
||
|
||
**Оператор == более понятный синтаксически.** Это еще почему? Для сравнения объектов в Java используется `.equals()`. Enum это объект. Логичнее и очевиднее использовать `.equals()` для сравнения, чтобы не нарушать единообразие сравнения объектов.
|
||
|
||
На мой взгляд, правильнее использовать `.equals()`, главное не забывать о правиле "Сравнение константы слева". |