1. Arrays im Speicher

In den vorherigen Beispielen waren die Abbildungen etwas ungenau.

Beim Erstellen von Arrays (wie auch beim Erstellen von Strings) werden zwei separate Speicherblöcke zugewiesen: einer zum Speichern des Arrays (Containers) selbst und ein zweiter Block für die Variable, die ihre Adresse speichert . Das Bild unten stellt diese Klarstellung dar:

Arrays im Speicher

Der für das Elementarray zugewiesene Speicher 10 intund die Variable, die die Adresse des Arrays int[]speichert , werden grün angezeigt.int

Zum Vergleich ist eine gewöhnliche intVariable, die den Wert speichert, 199blau dargestellt.

Das erinnert ein wenig an das Speichern von Strings im Speicher, finden Sie nicht?

Genau, Saiten. Und genau wie beim Arbeiten mit Strings können Sie Array-Variablen einander zuweisen:

Code Erläuterung
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Erstellen Sie ein Array von 10 intElementen. Weisen Sie der Zelle mit dem Index
den Wert zu . Weisen Sie der Zelle mit dem Index den Wert zu . Speichern Sie in der Variablen die in der Variablen gespeicherte Adresse . Zeigen Sie nun auf dasselbe Array-Objekt im Speicher. Schreiben Sie in die Zelle des Array-Objekts mit dem Index die Summe der Werte, die in den Zellen (die den Wert speichern ) und (die den Wert speichern ) gespeichert sind. 42
97
ba
ab
92479

Das Array-Objekt bleibt genau dort, wo es war, und die Variablen aund bspeichern dieselbe Adresse (Referenz) auf dasselbe Objekt. Sehen Sie das Bild an:

Arrays im Speicher 2

2. Weitere Details zum Arbeiten mit Arrays

Sie können ein Array von Elementen absolut beliebiger Art erstellen. Schreiben Sie dazu einfach eckige Klammern hinter den Typnamen. Im Allgemeinen sieht das Erstellen eines Arrays so aus:

type[] name = new type[number];

Dabei ist Typ der Typ der Elemente, die wir im Array speichern. Name ist der Name der Variablen, mit der wir auf das Array verweisen, und Zahl ist die Anzahl der Zellen im Array.

Das obige Beispiel ist die kanonische Form zum Erstellen einer Array-Variablen und eines Array-Objekts. In Wirklichkeit handelt es sich hierbei um zwei getrennte Einheiten.

Sie können eine Array-Variable separat von einem Array-Objekt erstellen:

type[] name;
name = new type[number];

Und noch ein Punkt, der nicht unerheblich ist:

Sie können Variablen oder sogar ganze Ausdrücke als Index-Array und Anzahl der Array-Elemente verwenden .

Beispiele:

Code Erläuterung
int n = 100;
int[] a = new int[n];
Erstellen Sie ein Array von nElementen
int n = 100;
int[] a = new int[n * 2 + 3];
Erstellen Sie ein Array mit 203Elementen
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Wichtig:
Übrigens sollten Sie sich darüber im Klaren sein, dass das Programm mit einem Absturz abstürzt, wenn Sie versuchen, über einen Index, der für das Array nicht existiert (in unserem Beispiel bedeutet das eine Ganzzahl, die nicht im Bereich liegt), auf eine Array-Zelle 0..99zuzugreifen ArrayIndexOfBoundException, was bedeutet, dass der Index außerhalb der Grenzen des Arrays lag.

3. Array-Länge

Wie Sie im vorherigen Beispiel gesehen haben, können Sie eine Array-Variable selbst erstellen und ihr später irgendwo im Code einen Wert (einen Verweis auf ein Array-Objekt) zuweisen. Sie können sogar Folgendes tun:

Code Erläuterung
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Erstellen Sie eine Array-Variable vom Typ. int[]
Wenn die aVariable kleiner als ist 10,
erstellen Sie ein Array von 10Elementen.
Andernfalls
erstellen Sie ein Array von 20Elementen

Und was kann man nun noch mit einem solchen Array machen? Woher wissen Sie, wie viele Elemente darin enthalten sind?

Um dies zu erleichtern, verfügen Arrays über eine spezielle Eigenschaft (Variable) mit dem Namen length. Mit diesem Ausdruck können Sie die Länge eines Arrays ermitteln:

array.length;

Hier arrayist der Name der Array-Variablen und lengthder Name der Array-Eigenschaft. Der Wert der lengthEigenschaft kann nicht geändert werden: Die lengthEigenschaft selbst kann anderen Variablen zugewiesen werden, ihr kann jedoch nichts zugewiesen werden (wenn Sie dies versuchen, wird das Programm einfach nicht kompiliert).

Wir können mit dem vorherigen Beispiel wie folgt fortfahren:

Code Erläuterung
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Erstellen Sie eine Array-Variable vom Typ. int[]
Wenn die aVariable kleiner als ist 10,
erstellen Sie ein Array von 10Elementen.
Andernfalls
erstellen Sie ein Array von 20Elementen.
Schleife über alle Elemente des Arrays: von 0bis Längearray.length - 1

4. Zusammenfassung der Fakten zu Arrays in Java

Fassen wir noch einmal zusammen, was wir über Arrays wissen:

Fakt 1. Ein Array besteht aus vielen Zellen.

Fakt 2: Sie greifen auf eine bestimmte Zelle zu, indem Sie deren Nummer (Index) verwenden.

Fakt 3. Alle Zellen sind vom gleichen Typ.

Fakt 4. Der Anfangswert aller Zellen ist 0 (wenn die Zellen Zahlen speichern), null(wenn die Zellen Objektreferenzen speichern) oder false(wenn die Zellen booleanWerte speichern). In diesem Kapitel erfahren Sie mehr über Standardwerte .

Fakt 5. String[] list ist nur die Deklaration einer Variablen. Dadurch wird nicht der Container (Array-Objekt) selbst erstellt. Um die Variable zu verwenden, müssen Sie zunächst ein Array (Container) erstellen und es der Variablen zuweisen. Siehe das Beispiel unten.

Fakt 6. Wenn wir ein Array-Objekt (Container) erstellen, müssen wir angeben, wie groß es ist, dh wie viele Zellen es enthält. Dies geschieht mit einer Anweisung wie: new TypeName[n];

Fakt 7. Die Länge eines Arrays kann mithilfe der .lengthEigenschaft ermittelt werden.

Fakt 8: Nachdem Sie ein Array erstellt haben, können Sie den Typ seiner Elemente oder die Anzahl der darin gespeicherten Elemente nicht mehr ändern.

Code Erläuterung
String s;
String[] list;
sist null
lististnull
list = new String[10];
int n = list.length;
Die listVariable speichert einen Verweis auf ein Objekt: ein String-Array bestehend aus 10Elementen.
nIst10
list = new String[0];

Now listbezieht sich auf ein Array von 0Elementen. Das Array existiert, kann aber keine Elemente speichern.

list = null;
System.out.println(list[1]);
Es wird eine Ausnahme (Programmfehler) ausgelöst, dh das Programm stürzt ab. listspeichert einen Verweis aufnull
list = new String[10];
System.out.println(list[10]);
Es wird eine Array-Out-of-Bounds-Ausnahme (Programmfehler) generiert.
Wenn a Elemente/Zellen listspeichert 10, sind die gültigen Indizes: 0 1 2 3 4 5 6 7 8 910Elemente.