8

由于 C# 中的枚举在堆栈上,我想知道枚举在 Java 中的创建位置。在堆栈上?在堆上?在另一个神秘的地方?

C# 中的枚举比 Java 中的更原始,这可以解释为什么它们是在堆栈上创建的......

他们在哪?我找不到他们!

谢谢

4

4 回答 4

9

Java 中的枚举也是对象:例如,枚举可以具有实例变量/方法/构造函数并实现接口。所有这些让我觉得它们就像 jvm 处理的其他对象一样。

于 2010-09-07T16:22:41.180 回答
6

由于 Java 枚举extend java.lang.Enum,它们像所有其他 Java 对象一样在堆上创建。

于 2010-09-07T16:25:13.373 回答
2

枚举是 Java 中的对象,因此它们位于堆上。但是,对于每种类型,它们只有固定数量。客户端代码正在处理对这些枚举对象的引用,因此实际上并没有在堆上创建任何东西。从规范的角度来看:局部变量引用在堆栈上;对象字段引用在堆上。

于 2010-09-07T16:44:42.213 回答
2

它们是对象,就像任何其他对象一样,所以枚举本身就在堆上。持有枚举引用的变量如果是函数变量,则可能位于堆栈上;如果它是对象的成员,则可能位于其他对象内部的堆上。

于 2010-09-07T17:11:04.053 回答