【发布时间】:2018-06-03 06:04:52
【问题描述】:
java 枚举是单例的吗?
例如:
public enum State {
ACTIVE(0),
PENDING(1),
DELETED(2),
}
State s = State.ACTIVE;
State s2 = State.PENDING;
State s3 = State.PENDING;
每次我们使用 State.FOO 时 java 都会创建新实例吗??
【问题讨论】:
-
您的枚举恰好有三个实例(
ACTIVE、PENDING和DELETED)(或者如果它是有效代码,则会出现)。它不会在您每次引用它时创建新实例。如果您的枚举中只有一个元素,而不是三个,那将是一个单例。 -
"因为每个枚举常量只有一个实例,所以在比较两个对象引用时允许使用 == 运算符代替 equals 方法,如果知道其中至少一个指一个枚举常量。” (JLS Sec 8.9.1)
标签: java design-patterns