Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
in meinem Buch heißt es, dass folgendes eine Kopie auf eine Referenz erstellt:
Java:
String s = new String("test");
String s2 = s;
In diesem Fall würde ich so denken: Ich habe ein Blatt Papier und 2 Stifte, mit denen ich darauf malen kann. Wenn ich jetzt beiden Stiften sage worauf sie zu malen haben und der eine etwas darauf malt, wird der andere dieses auch mitkriegen :bloed:
Wenn ich jetzt aber s ändere und dann s2 ausgebe, wird immer noch der übertragende, in diesem Fall, erste Wert ausgegeben und nicht der im s veränderte Wert. Also stimmt die Theorie, dass in s2 nur eine Referenz auf das bestehende Objekt erstellt wird, falsch, oder?
Für mich wäre das eine Kopie des ersten Strangs, was nicht sein kann, da es genau dafür ja die Methode clone() gibt...
du hast vollkommen recht mit deiner ersten erklärung. eigentlich müsste s2 auch den 2ten Wert ausgeben.
Dieses Verhalten bekommst du auch bei eigenen Objekten.
Die Klasse String hat dabei aber ein Sonderverhalten.
Intern ist ein String objekt unveränderlich. d.h. es wird bei jeder Änderung ein neues Stringobjekt erzeugt und darauf gezeigt.
deswegen verliert dein s nach der Änderung seine Referenz auf "test". und deswegen wird dieser Wert auch nicht geändert.
s2 hat dann immer noch seine Referenz auf "test" (welche somit auch nicht geändert wurde)
Warum das intern so gemacht wurde kann ich dir nicht sagen. ich denke aus effizienzgründen.
Bitte verbessert mich wenn ich Mist erzähle
Vielleicht hast du ja das Buch Java von Kopf bis Fuß, dort steht ganz hinten bei "Themen die wir nicht behandelt haben" sowas ähnliches
die Erklärung stimmt leider nicht nich so ganz - String hat kein Sonderverhalten, alle Objekte sind so. Eine Zuweisung mit = ist keine Änderung des Objekts, sondern eine Änderung der Variable - das ist in Java ein Unterschied. Ich habe das vor wenigen Tagen hier erklärt: http://www.java-forum.org/spiele-mu.../156655-proplem-evtl-klassen.html#post1000677
Falls danach noch Fragen verbleiben, einfach hier fragen