Java枚举被认为是原始类型还是引用类型?

时间:2010-07-12 19:41:15

标签: java

如果我有一个枚举对象,它被认为是原语还是引用?

4 个答案:

答案 0 :(得分:56)

这是一种参考类型。 Java原语是boolean byte short char int long float double

您可以通过调用ordinal()which is used by EnumSet and EnumMap iterator和“遍历元素的自然顺序(枚举常量的声明顺序)来获取枚举常量的值”

您甚至可以将自己的成员添加到枚举类中,如下所示:

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);

答案 1 :(得分:11)

枚举工作的方式实际上与它们在引入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枚举的工作原理大致相同,但有一些必要的功能可以支持序列化等。

我希望这个背景能够进一步阐明。

答案 2 :(得分:0)

This article基本上向您展示了如何实现枚举,正如SLaks所说,它们是引用。

答案 3 :(得分:-1)

枚举是引用类型,因为它们可以有方法,并且如果它们有主方法,也可以从命令行执行。

请参阅Sun / Oracle中的以下“Planet”示例

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