2010-09-07 5 views
8

Da Enum in C# auf dem Stapel sind, fragte ich mich, wo enum, in Java, wo erstellt wurde. Auf dem Stapel? Auf dem Haufen? An einem geheimnisvollen anderen Ort?Javas Enum ... Wo sind sie entstanden?

Enumeration in C# ist primitiver als die in Java, könnte dies erklären, warum sie auf dem Stapel erstellt werden ...

Wo sind sie? Ich kann sie nicht finden!

Dank

+4

Enums in C# * kann * auf dem Stapel sein, aber sie können auch auf dem Heap sein. Alles hängt davon ab, wo sie verwendet werden (Feld/Parameter/lokale Variable). Sie sind jedoch Werttypen, vielleicht ist das die Ursache für die Verwirrung? Außerdem sollte es in .NET egal sein, wo der Inhalt einer Variablen gespeichert ist; Dies ist nur ein Implementierungsdetail (und könnte sich in einer anderen Implementierung der CLR ändern). –

+1

Aus wilder Neugier, warum willst du wissen, ob sie auf dem Stapel oder auf dem Haufen sind? – whaley

+1

@whaley Einfache Neugier – ALOToverflow

Antwort

9

Aufzählungen in Java sind Objekte auch: zum Beispiel kann Aufzählungen haben Instanzvariablen/Methoden/Konstrukteuren und Schnittstellen implementieren. All dies lässt mich denken, dass sie genau wie andere Objekte von jvm gehandhabt werden.

+1

Was bedeutet ... Sie sind auf dem Haufen. – romacafe

6

Seit Java enums extendjava.lang.Enum, werden sie auf dem Heap wie alle anderen Java-Objekte erstellt.

+1

Technisch erweitern sie 'Enum'. Aber es ist ihr Status als Objekte (dh ihr indirekt erweitertes "Objekt"), das sie zu Referenztypen macht. – cHao

+0

@ 0xA3: Sie erweitern 'java.lang.Enum', wodurch' java.lang.Object' erweitert wird. – LukeH

+0

Nein, 0xA3, ich meine was ich gesagt habe. Sehen Sie sich den Javadocs-Link an, den ich gepostet habe. Sie erweitern java.lang.Enum, was wiederum java.lang.Object erweitert. – duffymo

2

Enums sind Objekte in Java, also sind sie auf dem Heap. Für jeden Typ gibt es jedoch nur eine feste Anzahl von ihnen. Der Client-Code behandelt die Referenzen mit diesen Enum-Objekten, sodass auf dem Heap tatsächlich nichts erstellt wird. Wie immer unter dem Gesichtspunkt der Spezifikation: lokale Variablenreferenzen sind auf dem Stapel; Objektfeldreferenzen befinden sich auf dem Heap.

+0

ersten Satz - "so sind sie auf dem Stapel" - Ich denke, Sie wollten "so, dass sie auf dem Haufen sind";) – serg10

+0

@ serg10 Ja. Ich wollte das auch nicht. –

2

Sie sind Objekte, genau wie jedes andere Objekt, also ist das Enum selbst auf dem Heap. Eine Variable, die einen Verweis auf eine Enumeration enthält, kann sich auf dem Stapel befinden, wenn es sich um eine Funktionsvariable handelt, oder sie kann sich auf dem Heap innerhalb eines anderen Objekts befinden, wenn es sich um ein Mitglied eines Objekts handelt.