Da Array-Typen Verweise sind, reicht es zum physikalischen
Kopieren nicht, eine einfache Zuweisung vorzunehmen.
Zum tatsächlichen Kopieren kann eine der Methoden Object.clone() oder System.arraycopy() verwendet werden.
Die folgenden Anweisungen deklarieren die Arrays a und b, wobei
beide Arrays auch initialisiert werden:
int a[] = {1, 2, 3, 4, 5};
int b[] = new int[5];
b = a;
a[0] = 55;
System.out.println(b[0]);
Durch die Zuweisung b = a wird das Array a nicht im eigentlichen
Sinne kopiert, sondern b verweist danach auf ein und dieselben
Elemente wie a. Änderungen an den Elementen von a wirken
sich also auch bei b aus. In diesem Beispiel wird daher 55
ausgegeben.
Die einfachste Möglichkeit, ein Array komplett zu kopieren, bietet die Methode clone(). Da sie in der Klasse Object definiert ist, ist sie auch bei allen Arrays verfügbar.
Falls nur ein bestimmter Bereich des Arrays kopiert werden soll, ist die
Methode System.arraycopy() zu verwenden.
Ihr werden folgende Parameter übergeben:
- Das Quell-Array
- Die Indexposition, ab der die Elemente aus dem Quell-Array kopiert werden
- Das Ziel-Array
- Die Indexposition, ab der die Elemente in das Ziel-Array hineinkopiert werden
- Die Anzahl der Elemente, die kopiert werden sollen
Zum vollständigen Kopieren kann man also eine der beiden folgenden Varianten nehmen:
b = a.clone();
System.arraycopy(a, 0, b, 0, a.length);
Bei Arrays von Objekten und somit auch geschachtelten Arrays ist zu beachten, dass die Arrays sowohl bei Object.clone() als auch bei System.arraycopy() flach kopiert werden, d. h., es werden nur die Objektreferenzen kopiert und nicht die Objekte selbst.