Перечень Java ... Где они созданы? - PullRequest
8 голосов
/ 07 сентября 2010

Поскольку enum в C # находятся в стеке, мне было интересно, где enum, в Java, где создан.В стеке?В куче?В каком-то загадочном другом месте?

Перечисления в C # более примитивны, чем в Java, это может объяснить, почему они создаются в стеке ...

Где они?Я не могу их найти!

Спасибо

Ответы [ 4 ]

9 голосов
/ 07 сентября 2010

Перечисления в Java также являются объектами: например, перечисления могут иметь переменные экземпляра / методы / конструкторы и реализовывать интерфейсы.Все это заставляет меня думать, что они обрабатываются JVM, как и другие объекты.

6 голосов
/ 07 сентября 2010

Поскольку Java перечисляет extension java.lang.Enum, они создаются в куче, как и все другие объекты Java.

2 голосов
/ 07 сентября 2010

Они являются объектами, как и любой другой объект, поэтому само перечисление находится в куче.Переменная, которая содержит ссылку на перечисление, может находиться в стеке, если она является переменной функции, или она может находиться в куче внутри какого-либо другого объекта, если она является членом объекта.

2 голосов
/ 07 сентября 2010

Перечисления являются объектами в Java, поэтому они находятся в куче. Однако для каждого типа есть только фиксированное количество из них. Клиентский код имеет дело со ссылками на эти перечисляемые объекты, поэтому фактически ничего не создает в куче. Как всегда с точки зрения спецификации: ссылки на локальные переменные находятся в стеке; ссылки на поля объекта находятся в куче.

...