2.15.6 | Kopieren von Arrays |
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:Zum vollständigen Kopieren kann man also eine der beiden folgenden Varianten nehmen:
- 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
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.