Wenn Sie von einem Blatt Papier eine Fotokopie machen würden, hätten Sie zwei Blatt Papier.
==
mit dem zweiten Blatt?
Nein; es sind getrennte Objekte mit äquivalenten Daten.equals()
mit dem zweiten Blatt?
Ja; die Daten auf beiden Blättern sind äquivalent.
Strings kommen so häufig in Programmen vor, dass Java ihre Verwendung optimiert hat.
Üblicherweise, wenn Sie einen String in Ihrem Programm brauchen, erzeugen Sie ihn wie folgt.
Beachten Sie, dass kein new
gebraucht wird.
String str = "ein Stringliteral" ;
Das erzeugt ein Stringliteral, das die Zeichen
String
).
Der Compiler behält die Literale in Ihrem Programm im Auge und
wird, wenn er kann, dasselbe Objekt wieder verwenden.
(Der Compiler wird nicht versuchen andere Typen von Objekten wieder zu verwenden. Stringliterale sind etwas Besonderes.)
Zum Beispiel angenommen, dass ein Programm die folgenden Anweisungen enthält:
String str1, str2; str1 = "ein Stringliteral" ; str2 = "ein Stringliteral" ;
Nur ein Objekt wird erzeugt, das die Zeichen str1
zu ändern noch
str2
, da Strings nicht geändert werden können).
Es gibt keinen Bedarf für zwei Stringobjekte, deren Inhalt identisch ist.
Das ist eine ganz andere Situation als die folgende:
String strA, strB; strA = new String("Mein String") ; strB = new String("Mein String") ;
Hier werden zwei Objekte erzeugt, die identische Daten enthalten. Der Compiler versucht nicht, das erste Objekt wieder zu verwenden.