web-dev-qa-db-de.com

int Array-Initialisierung

Ich habe hier eine einfache Frage in Bezug auf Java . Nehmen wir an, Sie haben ein int-Array als Instanzvariable:

int[] in = new int[5];

Jetzt enthält es standardmäßig 5 Nullen. Was aber, wenn Sie dasselbe Array wie die lokale Variable haben? Wird es zu Nullen initialisiert? Das ist keine Hausaufgabe, ich lerne Java-Sprache .. Viele Grüße

22
uml

Als Erstes zu verstehen ist, dass local varibles auf stack gespeichert werden, die nicht explizit mit ihren Standardwerten initialisiert werden. Während Instanzvariablen auf Heap gespeichert sind, werden sie standardmäßig mit ihrem Standardwert initialisiert. 

Objects werden auch auf Heap erstellt, unabhängig davon, ob eine Instanzreferenzvariable ihre Referenz oder eine lokale Referenzvariable enthält.


Was passiert, ist, wenn Sie Ihre Arrayreferenz wie folgt als lokale Variable deklarieren und sie mit einem Array initialisieren:

int[] in = new int[5];

Die Arrayreferenz (in) wird auf stack gespeichert und ein Speicher wird für ein Array zugewiesen, das 5 integer -Elemente in heap enthalten kann (Denken Sie daran, dass Objekte auf Heap erstellt werden). Dann werden 5 zusammenhängende Speicherplätze (size = 5) zum Speichern des integer - Werts auf Heap zugewiesen. Und jedes index in einem Array-Objekt enthält einen reference auf diese Speicherstellen in der Reihenfolge. Dann verweist die Arrayreferenz auf dieses Array. Da also Speicher für 5 Ganzzahlen auf Heap reserviert wird, werden sie auf ihren Standardwert initialisiert.

Und auch, wenn Sie Ihre Arrayreferenz deklarieren und sie nicht mit einem Arrayobjekt initialisieren: -

int[] in;

Die Arrayreferenz wird unter Stack erstellt (da es sich um eine lokale Variable handelt), sie wird jedoch nicht standardmäßig auf ein Array und auch nicht auf null initialisiert, wie dies bei Instanzvariablen der Fall ist.


So sieht die Zuordnung also aus, wenn Sie die erste Art der Arraydeklaration und -initialisierung verwenden: -

"Your array reference"
     "on stack"    

       |    |          "Array object on Heap"
       +----+                  
       | in |---------->  ([0, 0, 0, 0, 0])
       +----+
       "Stack"                  "Heap"
52
Rohit Jain

Es ist das Gleiche, wenn Sie dies tun: 

int[] in = new int[5] als Instanzvariable oder lokale Variable. Das Array-Objekt in enthält in beiden Fällen Nullen.

Der Unterschied wäre, wenn Sie so etwas tun würden: 

  1. Instanzvariable: int[] in; (es wird mit null initialisiert) und das in-Objekt wird in heap space leben.

  2. Lokale Variable: int[] in; (muss vom Benutzer initialisiert werden) lebt in stack

5
Ioan

Für Arrays vom primitiven Typ werden sie mit ihren Standardwerten initialisiert .. _. In der Dokumentation heißt es: 

ein eindimensionales Array wird mit der angegebenen Länge erstellt und Jede Komponente des Arrays wird mit ihrem Standardwert initialisiert

Für den Integer-Typ ist der Standardwert 0.

3

Ja, wenn Sie ein Array initialisieren, wird der Inhalt auf den Standardwert für diesen Typ festgelegt. Für int wäre dies 0 und für einen Referenztyp null.

Wenn Sie ein Array initialisieren und den Inhalt prüfen, können Sie dies selbst sehen:

...
final int[] in = new int[5];

for (int i = 0; i < in.length; i++) {
    System.out.println(in[i]);
}
...

Dies wird drucken:

0
0
0
0
0
2
Jonathan

ja

public void method() {
    int[] in = new int[5];
    System.out.pritnln(in[0]); //output in 0
}

In diesem Fall ist Ihr Array eine lokale Variable . Alles was Sie brauchen, ist Ihr Array zu initialisieren. Wenn Sie Ihr Array initialisieren, erhalten voila Ihr Array-Element ** ihre ** Standardwerte .

1
PermGenError

Es spielt keine Rolle, ob das deklarierte Array in einer Instanzvariablen oder einer lokalen Variablen mit dem Standardwert initialisiert wird.

Jede Klassenvariable, Instanzvariable oder Array-Komponente wird bei ihrer Erstellung mit einem Standardwert initialisiert.

Wie pro JLS

An array initializer creates an array and provides initial values for all its components.

1
Aniket Thakur

Das Array enthält nicht 5 Nullen, wenn Sie es als lokale Variable instanziieren.

0
Ishan Khanna