如果我有一个枚举对象,它被认为是原始类型还是引用类型?
如果我有一个枚举对象,它被认为是原始类型还是引用类型?
它是一个引用类型。Java基本类型包括boolean byte short char int long float double
。
你可以通过调用ordinal()
方法获取枚举常量的值,这个方法被EnumSet和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);
getOperation().eval(getA(),getB())
而无需使用 switch/case。我喜欢! :-) - corsiKa枚举的工作方式实际上与它们在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
}}
通过在类加载时实例化不同的套装,确保这些套装互斥,并且私有构造函数确保不会创建更多的实例。
这些内容可以通过 == 或 equals 进行比较。
Java 5 枚举基本上也是同样的方式,但具有一些必要的功能来支持序列化等。
我希望这些背景能够进一步说明问题。
枚举类型是引用类型,它们可以拥有方法,并且如果它们有主方法,也可以从命令行执行。
请参阅来自Sun/Oracle的以下“Planet”示例
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html