由于C#中的枚举位于堆栈中,我想知道在Java中创建枚举的位置。在堆栈上?在堆上?在一些神秘的其他地方?
C#中的枚举比Java中的枚举更原始,这可以解释为什么它们是在堆栈上创建的......
他们在哪里?我找不到他们了!
由于
答案 0 :(得分:9)
Java中的枚举也是对象:例如,枚举可以包含实例变量/方法/构造函数和实现接口。所有这些让我觉得它们就像jvm的其他对象一样被处理。
答案 1 :(得分:6)
自Java枚举extend java.lang.Enum
以来,它们就像所有其他Java对象一样在堆上创建。
答案 2 :(得分:2)
枚举是Java中的对象,因此它们位于堆上。但是,对于每种类型,它们只有固定数量。 客户端代码正在处理对这些枚举对象的引用,因此实际上并没有在堆上创建任何内容。从规范的角度来看:局部变量引用在堆栈上;对象字段引用在堆上。
答案 3 :(得分:2)
它们是对象,就像任何其他对象一样,因此枚举本身就在堆上。如果它是一个函数变量,那么保存对枚举的引用的变量可能在堆栈上,如果它是某个对象的成员,它可能在某个其他对象的堆内。