Was geht auf dem Stapel oder Heap?

8

Ich studiere etwas und bin auf eine Frage gestoßen, die das korrekte Speicherdiagramm des folgenden Codes anzeigt:

%Vor%

Hier ist mein Versuch, ein Speicherdiagramm, aber es kann falsch sein:

Ich verstehe Dinge wie Objekte, Instanzvariablen und "neue" Instanzen sind alle auf dem Haufen und Dinge wie lokale Variablen und primitive Typen sind auf dem Stapel, aber ich bin immer noch verwirrt, wenn es um Array-Typen kommt.

Jede Hilfe ist willkommen.

    
blutuu 16.05.2013, 04:48
quelle

3 Antworten

5

Jedes Objekt in Java lebt auf einem Heap.

In Java Array ist auch ein Objekt und daher Array-Objekt lebt auf Haufen.

Erklärung: -

Wenn Sie

schreiben %Vor%

Der (neue int [5]) Teil erzeugt ein Objekt und lebt somit auf dem Heap.

%Vor%

ist auch ein Objekt (denken Sie daran, dass neuer Operator immer ein neues Objekt erstellen wird).

und folglich, wenn du wright,

%Vor%

ist Array of Integer Object.

Soweit ArrayList betrachtet wird, ist es auch eine Klasse, aber es umschließt das Array-Objekt und fügt ihm dynamischen Speicher hinzu. Also,

%Vor%

erstellt erneut Objekt und lebt somit auf einem Heap.

Betrachten Sie die ArrayList-Klasse als:

%Vor%

also, wenn du schreibst d3.add (5) wird tatsächlich d3.add (new Integer (5)) aufgerufen.

Merken Sie sich eine goldene Regel: In Java, was auch immer Sie erstellen, Live auf HEAP und deren Referenz live auf Stapel.

Nachweis des Arrays als Objekt: -

%Vor%

// gibt True aus

    
WebServer 16.05.2013, 05:06
quelle
0

Arrays sind nicht primitiv in Java und haben eine konkrete Klasse in Java.

  

Ein Array ist ein Containerobjekt, das eine feste Anzahl von Werten enthält   ein einzelner Typ. Die Länge eines Arrays wird festgelegt, wenn das Array ist   erstellt.

%Vor%

Wenn Sie also ein Objekt eines beliebigen Array-Typs erstellen, muss es in den Heap-Bereich gehen.

    
Subhrajyoti Majumder 16.05.2013 04:51
quelle
0

Hier ist ein alternatives, korrektes Speicherdiagramm.

    
blutuu 16.05.2013 05:32
quelle

Tags und Links