Methoden Array unbedingt klonen? und Point Frage.

  • Themenstarter Themenstarter malNeFrage
  • Beginndatum Beginndatum
M

malNeFrage

Gast
Hallo,

evlt kann mir ja jemand weiterhelfen. Und zwar habe ich 2 Fragen

1. Ich habe vor ein ArrayA zu füllen und dessen Werte in ein ArrayB zu "kopieren". Nun ist es ja so das durch die einfache Zuweisung...

Java:
ArrayB=ArrayA

nur auf ArrayA verwiesen wird, es sich also nicht um wirkliche Kopien handelt, da bei einer neuen Zuweisung von z.B. ArrayA[5]=99 auch ArrayB[5]=99 wird. Durch das Klonen kann ich dieses Problem
natürlich lösen. Meine Frage ist. Falls ich das ArrayA nun nicht klone sondern über eine simple for schleife die Elemente einzeln "kopiere?"...

Java:
for(i=0; i<=x-1; i++)
ArrayB[i]=ArrayA[i];

handelt es sich dann hierbei um wirkliche Kopien oder auch nur Referenzen auf das Ursprungsarray?

2. Ich habe versucht ein Point Array über die selbe for schleife zu kopieren. Leider erfolglos. punkte[] ist gefüllt.

Java:
punkteB[9]=punkteA[9]

Kann mir jemand den Grund verraten wieso das nicht funktioniert? Auch...

Java:
punkteB[9].x=punkteA[9].x
punkteB[9].y=punkteA[9].y

scheint nicht zu funktionieren. Was mache ich falsch?

Viele Grüße
 
  1. Die Variablen
    Code:
    ArrayA
    und
    Code:
    ArrayB
    zeigen dann auf unterschiedliche Arrays mit dem gleichen Inhalt.
    Klonen geht leichter/schneller über [JAPI]Object#clone()[/JAPI] oder [JAPI]System#arraycopy(java.lang.Object, int, java.lang.Object, int, int)[/JAPI].
  2. Was funktioniert nicht?
 
Vielen Dank xehpuk!

1. Frage perfekt beantwortet, 2. frage hat sich als tippfehler im code herausgestellt.

Schönen Morgen noch!
 
Vorsicht:

Code:
for(i=0; i<=x-1; i++)
    ArrayB[i]=ArrayA[i];

kopiert die Elemente nur bei primitiven Datentypen.
Wenn du Objekte in deinem Array hast, werden nur die Referenzen kopiert.

Somit verweisen ArrayA[x] und ArrayB[x] jeweils auf das selbe Objekt.
Eine Änderung an einem Attribut von ArrayA[x] würde also in beiden Arrays zum Tragen kommen.
 
normalerweise macht man arrayName.clone() ...
damit wird zwar nur das array geclont ... also die referenzen kopiert (bei primitiven datentypen natürlich diese direkt) ... und hat zur folge das wenn man ein einem objekt rumspielt es eben nur das eine objekt ist ... allerdings ist der hinter array-cloning das man das ausgangs-array an sich verändern kann ohne das es auswirkungen auf die kopie hat ...

will man wirklich das auch die objekte im array nicht nur als referenz kopiert werden sondern völlig neue objekte entstehen brauchst du sog. Deep-Cloning ...
 

Zurück
Oben