Hallo!
Kann bzw. wie kann ich statt einer Referenz eine Kopie des Objekts an eine Methode übergeben (mit dem Ziel, das Änderungen am Objekt in der Methode nicht nach draussen übernommen werden)?
Grüße, Robert
Hallo!
Kann bzw. wie kann ich statt einer Referenz eine Kopie des Objekts an eine Methode übergeben (mit dem Ziel, das Änderungen am Objekt in der Methode nicht nach draussen übernommen werden)?
Grüße, Robert
Hmmm, inzwischen bin ich irgendwie draufgekommen, dass er das mal so und mal so macht.
Z. B. scheint er bei einem String eine Kopie zu machen, bei einem Vektor schickt er eine Referenz.
Kann das jemand erklären? :o)
Grüße, Robert
Hmmm, inzwischen bin ich irgendwie
draufgekommen, dass er das mal so und mal
so macht.Z. B. scheint er bei einem String eine
Kopie zu machen, bei einem Vektor schickt
er eine Referenz.Kann das jemand erklären? :o)
Gib doch mal ein kurzes Programmbeispiel an, bei dem man dann argumentieren kann.
Kopiert wird übrigens mit der Methode clone() der Klasse Object. Rückgabe ist vom Typ Object, so daß evtl. noch ein Cast gemacht werden muß.
Manchmal wird jedoch das selbe (oder war es das gleiche?), sprich „this“ zurückgegeben.
Grüße, Robert
MfG, Frank
Kopiert wird übrigens mit der Methode
clone() der Klasse Object.
Jo, aber die Methode muß man AFAIK selber implementieren.
Und bei Vector funkts auch irgendwie nicht sondern gibt wie von dir geschildert wiederum nur eine Referenz zurück, nicht sonderlich hilfreich. :o(
Grüße, Robert
Hallo!
Und bei Vector funkts auch irgendwie
nicht sondern gibt wie von dir
geschildert wiederum nur eine Referenz
zurück, nicht sonderlich hilfreich. :o(
Bei „normalen“ Datentypen wie String, Integer,… wird immer eine Kopie, bei Objekten eine Referenz zurückgegeben. Ein Vector ist natürlich auch ein Objekt, da er von java.util.Vector instanziert wird.
Vector mySlaveVector = new Vector();
Wenn Du dennoch den Inhalt und nicht die Referenz des Inhalts haben willst, mußt Du ihn in den jeweiligen Datentyp casten. Im folgenden Beispiel habe ich einen eigenen Typ namens Slave definiert, diese Objekte enthalten u. a. ein Attribut namens nameSlave:
void showSlave(Vector mySlaveVector)
{
for (int i = 0; i
Grüße, Tanja
Bei „normalen“ Datentypen wie String,
Integer,… wird immer eine Kopie, bei
Objekten eine Referenz zurückgegeben. Ein
Vector ist natürlich auch ein Objekt, da
er von java.util.Vector instanziert wird.
Was du meinst sind die „primitives“ wie int, char, etc.
Bei String und Integer handelt es sich genauso um Klassen (java.lang.String und java.lang.Integer).
Das ist es auch was mich an dem Verhalten so irritiert. :o)
Wenn Du dennoch den Inhalt und nicht die
Referenz des Inhalts haben willst, mußt
Du ihn in den jeweiligen Datentyp casten.
Finde ich auch eher seltsam, das der Cast eine Kopie anlegt. Aber what shells …
Grüße, Robert
Hallo!
Bei String und Integer handelt es sich
genauso um Klassen (java.lang.String und
java.lang.Integer).
Ja, aber Strings oder Integer werden nicht durch einen Konstruktoraufruf mit new() deklariert und in dem Sinne auch nicht instanziiert, oder? Bei der Variablendeklaration sage ich beispielsweise int myInt; aber Vector myVector = new Vector();
Wenn Du dennoch den Inhalt und nicht die
Referenz des Inhalts haben willst, mußt
Du ihn in den jeweiligen Datentyp casten.Finde ich auch eher seltsam, das der Cast
eine Kopie anlegt. Aber what shells …
So ist es auf jeden Fall, ich habe es schon selbst ausprobiert. Warum Java das so macht, kann ich Dir leider auch nicht erklären, vielleicht findet sich ja hier im Forum noch ein Java-Guru, der uns dies mitteilen kann…
Grüße, Tanja
Ja, aber Strings oder Integer werden
nicht durch einen Konstruktoraufruf mit
new() deklariert und in dem Sinne auch
nicht instanziiert, oder? Bei der
Variablendeklaration sage ich
beispielsweise int myInt;
aber Vector myVector = new
Vector();
Wie gesagt, int ist ein Grunddatentyp, da stimmt das.
Aber einen String/Integer (es gibt den Grunddatentyp int und die Klasse Integer) instanziierst du genauso mit new:
String sTest = new String( „INHALT“ );
Es geht halt auch implizit mit String sTest = „INHALT“.
Grüße, Robert