Warum sind Strings Immutable?

Maik.Neumann

Aktives Mitglied
Hallo !

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?

Danke und Gruß
 

kaoZ

Top Contributor
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 .
 
Zuletzt bearbeitet:

VfL_Freak

Top Contributor
Moin,

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?

wenn du damit einen String 's' mit dem Wert "test" meinst, wohl nicht!
Als liegt "test" sicher noch im sog. "String literal pool" !
Hier mal zwei Links zu dem Thema
What is String literal pool? (siehe gnz unten)
Java String literal pool and string object - Stack Overflow

Gruß
Klaus
 

kaoZ

Top Contributor
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.
 
Zuletzt bearbeitet:

Maik.Neumann

Aktives Mitglied
Hallo noch einmal !

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:

How to create Immutable Class and Object in Java - Tutorial Example

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?

Danke und Gruß
 

turtle

Top Contributor
Würde ich mit der Methode append() der Klasse StringBuilder oder StringBuffer ebenfalls einen neuen String erzeugen
das erklärt sich doch von selbst, oder?

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.
Java:
sb.toString()
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
P OOP Testen ob 2 Strings gleich sind Java Basics - Anfänger-Themen 8
D Strings sind ungleich obwohl sie in der Ausgabe gleich sind Java Basics - Anfänger-Themen 10
N TextZeile in einzelne Strings teilen, die mit Komma getrennt sind Java Basics - Anfänger-Themen 4
H Warum sind in Java Strings und Arrays eigentlich unveränderlich? Java Basics - Anfänger-Themen 2
L Bedingung immer false, auch wenn zwei Strings gleich sind Java Basics - Anfänger-Themen 11
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
mhmt_03 dafür sorgen, dass im JTextfield nur zahlen eingebbar sind Java Basics - Anfänger-Themen 9
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
H Was sind Package bei eclipse? Java Basics - Anfänger-Themen 1
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
Azazel Wie wichtig sind Castings in Java ? Java Basics - Anfänger-Themen 1
S Was sind Java Beans? Java Basics - Anfänger-Themen 7
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
P Wieviele Tage seit dem Datum vergangen sind Java Basics - Anfänger-Themen 5
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
? Wie sind ESCAPE-Sequenzen (z.B \f für einen Seitenvorschub) richtig anuwenden? Java Basics - Anfänger-Themen 3
S Werte aus SingeltonKlasse sind manchmal =0 &manchmal !=0 Java Basics - Anfänger-Themen 1
M Sind solche boolean Anweisen empfehlenswert? Java Basics - Anfänger-Themen 3
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
M String überprüfen ob nur Buchstaben enthalten sind? Java Basics - Anfänger-Themen 10
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
L JDK installieren Sind in src.zip tatsächlich die verwendeten Klassen? Java Basics - Anfänger-Themen 7
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
B Funktionen programmieren, die im Hintergrund aktiv sind Java Basics - Anfänger-Themen 2
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
C hashCode() bei Klassen, die nicht immutable sind Java Basics - Anfänger-Themen 27
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
E Was sind Javascript und Java EE? Java Basics - Anfänger-Themen 7
S Wie performance lastig sind rekursionen Java Basics - Anfänger-Themen 13
C Nach Java-Installation sind Befehle erfolglos Java Basics - Anfänger-Themen 4
B Variablen Warum sind die blau Java Basics - Anfänger-Themen 2
L Liste aller Klassen die in einem Paket sind Java Basics - Anfänger-Themen 7
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
M Erste Schritte zwei Buchstaben die im String enthalten sind ausgeben Java Basics - Anfänger-Themen 21
J Drei Errors sind drei zuviel! Java Basics - Anfänger-Themen 25
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
H Wieviele Objekte gleichzeitig sind sinnvoll? Java Basics - Anfänger-Themen 4
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
D Sind Enums typsichere Konstanten? Java Basics - Anfänger-Themen 15
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
W Array nach Elemenden die durch 2 teilbar sind durchsehen Java Basics - Anfänger-Themen 9
L Elemente die in Array1 sind aus Array2 löschen Java Basics - Anfänger-Themen 6
C Compiler-Fehler Variablen sind angeblich nicht initialisiert Java Basics - Anfänger-Themen 7
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
I Was sind denn überhaupt Doctypes bei Java? Java Basics - Anfänger-Themen 7
Developer_X Sounds abspielen, die im internet sind (.wav) Java Basics - Anfänger-Themen 2
A Erzeugte Objekte sind nicht bekannt Java Basics - Anfänger-Themen 16
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
nrg Datentypen Sind Arrays Objekte? Java Basics - Anfänger-Themen 9
B Für was sind die Annotationen gut? Java Basics - Anfänger-Themen 6
F import Statement für Klassen die dem default Package zugeordnet sind? Java Basics - Anfänger-Themen 2
T Probleme mit ArrayList, in der Objekte gespeichert sind, die ArrayLists enthalten Java Basics - Anfänger-Themen 2
Semox Sind Objekte in einer ArrayList überschreibbar? Java Basics - Anfänger-Themen 2
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
feuervogel Datentypen Zwei Sets sind gleich, aber dann doch nicht Java Basics - Anfänger-Themen 9
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
M Was sind das für Probleme? Java Basics - Anfänger-Themen 6
B was sind Dataflavor Java Basics - Anfänger-Themen 2
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
T Sind Kontrollflussanweisungen auch Methoden? Java Basics - Anfänger-Themen 5
N Wie schlimm sind Cyclen in einem Programm Java Basics - Anfänger-Themen 3
G welche Teile der api sind wichtig? Java Basics - Anfänger-Themen 3
T Was sind Attribute? Java Basics - Anfänger-Themen 9
P Was sind Vectoren und Maps in Java? Java Basics - Anfänger-Themen 3
G Sind das Generics Java Basics - Anfänger-Themen 2
P Prüfen ob alle zellen der tabelle leer sind Java Basics - Anfänger-Themen 9
C Alle Zeichen, die in der Console sind in Textdatei Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben