Подтвердить что ты не робот

Явными перечислениями считаются примитивные или ссылочные типы?

Если у меня есть объект перечисления, считается ли он примитивным или ссылочным?

4b9b3361

Ответ 1

Это ссылочный тип.

В отличие от многих языков, в которых enum представляет собой набор интегральных констант, перечисления Java являются неизменяемыми экземплярами объектов. Вы можете получить числовое значение экземпляра enum, вызвав ordinal().

Вы даже можете добавить своих собственных членов в класс enum, например:

public enum Operation {
  PLUS   { double eval(double x, double y) { return x + y; } },
  MINUS  { double eval(double x, double y) { return x - y; } },
  TIMES  { double eval(double x, double y) { return x * y; } },
  DIVIDE { double eval(double x, double y) { return x / y; } };

  // Do arithmetic op represented by this constant
  abstract double eval(double x, double y);
}
//Elsewhere:
Operation op = Operation.PLUS;
double two = op.eval(1, 1);

Ответ 2

Работа с перечислениями на самом деле не слишком отличается от того, как они использовались до их введения с Java 5:

public final class Suit {

public static final Suit CLUBS = new Suit();
public static final Suit DIAMONDS = new Suit();
public static final Suit HEARTS = new Suit();
public static final Suit SPADES = new Suit();

/**
 * Prevent external instantiation.
 */
private Suit() {
    // No implementation
}}

Путем создания экземпляров различных мастей при загрузке классов обеспечивается, что они будут взаимоисключающими, а частный конструктор гарантирует, что никаких дополнительных экземпляров не будет создано.

Они были бы сопоставимы либо через ==, либо равны.

Перехват Java 5 работает примерно так же, но с некоторыми необходимыми функциями для поддержки сериализации и т.д.

Я надеюсь, что этот фон проливает некоторый дополнительный свет.

Ответ 3

В этой статье по существу показано, как реализованы перечисления, и, как говорит SLaks, это ссылки.

Ответ 4

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

Смотрите пример "Планета" из Sun/Oracle

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html