Как хранится в памяти enum

«Как хранится в памяти enum» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Enums в Kotlin (и Java) представляются как классы, где каждая константа — это экземпляр этого класса. В памяти это реализовано через статический массив $VALUES, содержащий все константы enum.

enum class Direction {
    NORTH, SOUTH, EAST, WEST
}

В байт-коде это преобразуется примерно в:

public final class Direction extends Enum {
    public static final Direction NORTH = new Direction("NORTH", 0);
    public static final Direction SOUTH = new Direction("SOUTH", 1);
    //... остальные константы
    private static final Direction[] $VALUES = new Direction[]{NORTH, SOUTH, EAST, WEST};
}

Особенности:

  • Каждая константа — синглтон (единственный экземпляр)
  • Enum занимает больше памяти, чем обычные константы, из-за overhead класса
  • Доступ к значениям через ordinal() (порядковый номер) и name (имя строкой)