Brauch ich dazu clone()?

Status
Nicht offen für weitere Antworten.

monti

Mitglied
Hallo!

Folgendes habe ich vor:

Eine Methode setNull(int position) soll an der Position im Array das entsprechende Personen-Objekt auf null setzten und das alte Objekt auf der Position zur toString() Ausgabe nochmal zurückgeben (z.B. Gelöscht: Person XYZ)

Kann ich das so machen:

Code:
public Person setNull(int position){
   Person temp = personenarray[position];
   personenarray[position] = null;
   return temp;
}

Oder sollte ich es besser mit clone machen?

Danke für eure Hilfe und nen guten Rutsch ins Jahr 2007!
 
Schichworte zu deinem Problem wären,

Copy by value

versus

Copy by Reference,

mit temp = personenarray[position];

wird temp die Reference auf personenarray[position] übergeben,

und dann personenarray[position] null gesetzt, so wird auch temp auf null gesetzt, da es ja nur Referenciert wurde.

Das ist mitunter der Grund warum man bei manchen if Abfragen equals anstatt == benutzen sollte (z.B. Vergleich von Strings).

Personen/Strings sind halt keine (ich weiß gerade den Begriff nicht daher beschreibe ich es als einfache DatenTypen wie z.b int, double) sondern Objekte.

Ich persönlich würde daher eher clone() verwenden um temp als eine Kopie der Person zu haben anstatt nur die Reference.
 
habichnett hat gesagt.:
mit temp = personenarray[position];
wird temp die Reference auf personenarray[position] übergeben,
und dann personenarray[position] null gesetzt, so wird auch temp auf null gesetzt, da es ja nur Referenciert wurde.

Hä? Was?
Code:
personenarray[position]
ist eine Referenz auf eine bestimmte Stelle im Speicher. Die Zuweisung
Code:
temp = personenarray[position];
kopiert diese nach temp. Das anschließende
Code:
personenarray[position] = null;
hat keine Auswirkung auf temp.

Gibt's da nicht einen FAQ-Eintrag dazu? Ah ja, hier: http://www.java-forum.org/de/viewtopic.php?t=5390
 
Habe jetzt mal bisschen rumprobiert. Mein Code von oben funktioniert ohne clone(). Also benutzt Java kein Call-by-Reference. Wieder was gelernt! Danke!

monti
 
Java isn Zwitter in der Hinsicht. Primitive Datentypen werden bei Übergabe kopiert, ebenso Referenzen. Objekte bleiben wie sie sind.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben