zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Wenn wir von einem Blatt Papier eine Kopie machen, haben wir zwei Blatt Papier.

Antwort:

  1. Sind Papierblätter einzelne Objekte? Ja; jedes Objekt hat seine eigene Identität.
  2. Ist das erste Blatt == mit dem zweiten Blatt? Nein; es sind zwei eigenständige Objekte mit äquivalenten Daten.
  3. Sind die Daten eines jeden Blattes die gleichen, wie die des anderen? Ja; die Daten des zweiten Blattes sind eine Kopie des ersten.
  4. Ist das erste Blatt equals() mit dem zweiten Blatt? Ja; die Daten auf beiden Blättern sind äquivalent.

Stringliterale

Strings kommen so häufig in Programmen vor, dass Java ihre Verwendung optimiert hat. Üblicherweise, wenn wir einen String in unserem Programm brauchen, erzeugen wir ihn wie folgt. Beachtet, dass kein new gebraucht wird.

String str = "ein Stringliteral" ;

Das erzeugt ein Stringliteral, das die Zeichen "ein Stringliteral" enthält. Ein Stringliteral ist ein Objekt (der Klasse String). Der Compiler behält die Literale in unserem 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" ;

Hier wird nur ein Objekt erzeugt, das die Zeichen "ein Stringliteral" enthält. Das ist sicher, da Strings unveränderbar sind (also wird ein Programm weder versuchen 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.


FRAGE 21:

Wie viele Objekte werden durch den folgenden Code erzeugt:

String msg1, msg2, msg3;

msg1 = "Aufgepasst!" ;

msg2 = "Aufgepasst!" ;

msg3 = "Aufgepasst!" ;