Ich habe mal eine Frage zu String in Java. Sehe ich das richtig, dass man mit dem + Operator in Java immer wieder neue Strings erzeugt, genauso wie mit der Replace Funktion der Klasse String?
Java:
String s ="test";
s = s +"_beendet";System.out.println(s);
Also s wäre dann immernoch "test" aufgrund der Tatsache, dass ich mittels + ein neues Objekt erzeugt habe und s eine andere Adresse enthält?
Um auf die Fragestellung zu Antworten : Weil es so festgelegt wurde .^^
Was genau ist den jetzt unklar ?
ausgegeben wir mit deinem Code
Code:
test_beendet
, hier werden 2 String Objekte erzeugt die letzten Endes über einen StringBuilder und per .append() zusammengeführt werden, woraus wiederum resultiert das
Code:
s
ein anderes Objekt Referenziert wie noch vor der Zuweisung eines weiteren Objektes per + Operator.
Dir muss bewusst sein das s nicht das Objekt ist , sondern eine Referenz auf ein Objekt.
Du kannst das Objekt an sich nicht verändern , da es unveränderlich ist, aber du kannst die Referenz auf ein anderes Objekt zeigen lassen, nichts anderes passiert hier .
das bedeutet also, dass das String Objekt in meinem SourceCode mit dem Wert "test" schiclicht nicht mehr erreichbar ist, weil es nicht mehr referenziert wird, oder?
das bedeutet also, dass das String Objekt in meinem SourceCode mit dem Wert "test" schiclicht nicht mehr erreichbar ist, weil es nicht mehr referenziert wird, oder?
das bedeutet also, dass das String Objekt in meinem SourceCode mit dem Wert "test" schiclicht nicht mehr erreichbar ist, weil es nicht mehr referenziert wird, oder?
Das sollte soweit korrekt sein , das Objekt welches vorher referenziert wurde ( in diesem Fall vom Typ String mit dem Wert "test") , wird nun nicht mehr referenziert und bei Gelegenheit dann von der GC aus dem Speicher / vom Heap entfernt, vorrausgesetzt es ist keine weitere Referenz mehr auf dieses Objekt vorhanden.
Eine Frage hätte ich noch einmal zu dem Thema. Würde ich mit der Methode append() der Klasse StringBuilder oder StringBuffer ebenfalls einen neuen String erzeugen, oder finden solche Operationen immer auf ein- ud demselben Objekt statt?
Ich habe hier einen Artikel zu dem Thema Immutable Objekt gefunden:
Hier wird ebenfalls mit Strings gearbeitet und diese auch zurückgegeben. Würde ich jetzt als Client, der dieses Objekt anspricht und einen der Stringwerte auslesen würde jetzt ein- und dasselbe Objekt manipulieren, wenn ich hier mit der append Methode arbeiten würde?
Du würdest durch ein append keinen String erzeugen, sondern einen StringBuilder, wie auch die javadoc genau beschreibt.
[EDIT]StringBuilder append(String str)
Appends the specified string to this character sequence.[/EDIT]
Daher kannst du so etwas schreiben
Java:
sb.append("Eine").append("Frage");
Und der Vorteil ist, das du zum Schluss dir den gesamten String abholen kannst.