Тип enum в Java на самом деле представляет собой специальный класс, сгенерированный компилятором, а не арифметический тип: значения enum ведут себя как глобальные предварительно созданные экземпляры, чтобы сравнивать ссылки вместо equals
.
Вы можете проверить это, разобрав файл .class:
Code:
0: getstatic #2; //Field YourEnum.BAR:LYourEnum;
3: getstatic #3; //Field YourEnum.FOO:LYourEnum;
6: if_acmpne 17
он должен примерно соответствовать следующему коду Java:
enum YourEnum {
FOO,
BAR
}
// ...
if (YourEnum.BAR == YourEnum.FOO)
Ради простоты вы можете представить это как особый случай интернирования строк .