Array mit einem anderen Array gleichsetzten Java?
Ich programmiere das Game of Live, und habe ein "Anfangs" Array, anhand von dem ich dann schaue ob eine Stelle in der nächsten Runde lebt oder nicht. Daher kann ich dieses Array anfangs nicht verändern, und habe ein neues Array erstellt indem ich die Werte für die nächste Runde vorerst speichere. Damit ich für dieses Array aber keine extra print Methode schreiben muss, dachte ich mir ich könnte einfach das Anfangsarray mit dem zweiten Array überschreiben. Geht das, und wenn ja wie?
(Ich hoffe die Erklärung ist halbwegs verständlich...)
2 Antworten
Kannst Du nicht... (mit einer einfachen Zuweisung) , Arrays werden Referenziert, und Du hast im schlechtesten Fall nur ein "echtes" Array und alle anderen Variablen verweisen lediglich auf dieses...
Bei einer einfachen Zuweisung einer Arrayvarible an eine andere Variable wird in Java (und den meisten anderen gängigen Programmiersprachen) lediglich eine Referenz gespeichert, welche auf das Original verweist. Das bedeutet, dass eine solche Kopie sich sich bei einer Änderung des Orginals ebenfalls ändert. (...und umgekehrt)
int intArray[] = {12,15,17};
int copyArray[] = new int[intArray.length];
copyArray = intArray;
copyArray[1]++
//nun haben beide den Inhalt 12,16,17
Möchtest Du eine "echte" Kopie des Objekts anlegen kannst Du die enthaltenen Werte per Loop der Kopie zuweisen:
for (int i=0; i<intArray.length; i++) {copyArray[i] = intArray[i];}
Was natürlich auch nur reibungslos klappt, wenn die Arrayelemente ihrerseits Basistypen sind. (Objecttypen werden weiterhin referenziert !).
Das Arrayobject verfügt selbst über die nötigen (schnellen) Methoden um eine "Deep Copy" zu erstellen.
- System.arraycopy(...)
- System.copyOfRange(...)
- SourceObject.clone()
Ich gehe hier nicht auf Einzelheiten ein. Siehe dazu:
Die Wahl der Methode hängt von der Komplexität der Quelle ab.
Ja, kannst du machen. Ist im einfachsten Fall ja nur eine Zuweisung.
...nö...
Bei normalen Zuweisungen von Arrays (Objects) hast Du keine Kopie der enthaltenen Werte, sondern eine Referenz .