如果我有一个枚举对象,它被认为是原语还是引用?
答案 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