2010-09-07 11 views
8

Dado que enum en C# están en la pila, me preguntaba dónde enum, en Java, dónde se creó. En la pila? En el montón? En algún otro lugar misterioso?Enum de Java ... ¿Dónde están creados?

Enumeración en C# son más primitivos que los de Java, esto podría explicar por qué se crean en la pila ...

¿Dónde están? No puedo encontrarlos!

Gracias

+4

Los mensajes en C# * pueden * estar en la pila, pero también pueden estar en el montón. Todo depende de dónde se usan (campo/parámetro/variable local). Sin embargo, son tipos de valor, ¿tal vez de ahí viene la confusión? Además, en .NET no debería importar dónde se almacena el contenido de una variable; esto es solo un detalle de implementación (y podría cambiar en una implementación diferente del CLR). –

+1

Por curiosidad salvaje, ¿por qué quieres saber si están en la pila o en el montón? – whaley

+1

@whaley Curiosidad simple – ALOToverflow

Respuesta

9

enumeraciones en Java son también objetos: por ejemplo, las enumeraciones puede tener una instancia variables/métodos/constructores e implementar interfaces. Todo esto me hace pensar que son manejados como otros objetos por jvm.

+1

Lo que significa ... Están en el montón. – romacafe

6

Desde las enumeraciones de Java extendjava.lang.Enum, se crean en el montón como todos los demás objetos de Java.

+1

Técnicamente, extienden 'Enum'. Pero es su estado como objetos (es decir, su 'Objeto' que se extiende indirectamente también) lo que los haría tipos de referencia. – cHao

+0

@ 0xA3: extienden 'java.lang.Enum' que a su vez extiende' java.lang.Object'. – LukeH

+0

No, 0xA3, quiero decir lo que dije. Mira el enlace javadocs que publiqué. Extienden java.lang.Enum, que a su vez extiende java.lang.Object. – duffymo

2

Los mensajes son objetos en Java, por lo que están en el montón. Sin embargo, para cada tipo solo hay un número fijo de ellos. El código de cliente trata las referencias a estos objetos enum, por lo que no crea nada en el montón. Como siempre desde el punto de vista de la especificación: las referencias de variables locales están en la pila; las referencias de campo de objeto están en el montón.

+0

primera oración - "para que estén en la pila" - Creo que quisiste escribir "para que estén en el montón";) – serg10

+0

@ serg10 Sí. No quería ese # tampoco. –

2

Son objetos, al igual que cualquier otro objeto, por lo que la enumeración está en el montón. Una variable que contiene una referencia a una enumeración puede estar en la pila si es una variable de función, o puede estar en el montón dentro de otro objeto si es miembro de un objeto.