Wenn Sie von einem Blatt Papier eine Fotokopie machen würden, hätten Sie zwei Blatt Papier.

Eine gute Antwort könnte sein:

  1. Sind Papierblätter einzelne Objekte? Ja; jedes Objekt hat seine eigene Identität.
  2. Ist das erste Blatt == mit dem zweiten Blatt? Nein; sie sind getrennte Objekte mit äquivalenten Daten.
  3. Sind die Daten eines jeden Blattes die gleichen, als 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.

String-Literale

Strings kommen häufig in Programmen vor, also optimiert Java ihre Verwendung. Üblicherweise, wenn Sie einen String in Ihrem Programm brauchen, erzeugen Sie ihn wie folgt. Beachten Sie, dass kein new gebraucht wird.

String str = "String Literal" ;

Dies erzeugt ein String-Literal, dass die Zeichen "String Literal" enthält. Ein String-Literal ist ein Objekt (der Klasse 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. String-Literale sind etwas besonderes.)

Zum Beispiel angenommen, dass ein Programm die folgenden Anweisungen enthält:

String str1, str2;

str1 = "String Literal" ;

str2 = "String Literal" ;

Nur ein Objekt wird erzeugt, das die Zeichen "String Literal" enthält. Dies 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 verschieden von dieser Situation:

String strA, strB;
strA = new String("My String") ;

strB = new String("My String") ;

In der obenstehenden Situation werden zwei Objekte erzeugt, die identische Daten enthalten. Der Compiler versucht nicht, das erste Objekt wieder zu verwenden.

FRAGE 20:

Wie viele Objekte werden durch den folgenden Code erzeugt:

String msg1, msg2, msg3;

msg1 = "Aufgepasst!" ;

msg2 = "Aufgepasst!" ;

msg3 = "Aufgepasst!" ;