Schaut der == -Operator nach dem Inhalt der Objekte, wenn die if-Anweisung ausgeführt wird?
Nein. Er schaut nur nach den zwei Referenzvariablen.
Beide enthalten verschiedene Referenzen,
so ergibt die Auswertung von == falsch.
Hier ist ein weiteres Beispielprogramm:
class BspString5
{
public static void main ( String[] args )
{
String strA; // Referenz auf das Objekt
String strB; // eine weitere Referenz auf das Objekt
strA = new String( "Der Gingham Hund" ); // Das einzige Objekt erzeugen.
// Seine Referenz in strA speichern.
System.out.println( strA );
strB = strA; // Die Referenz nach strB kopieren.
System.out.println( strB );
if ( strA == strB )
System.out.println( "Dieselbe Information in jeder der Referenzvariablen." );
}
}
|
Zur Laufzeit des Programms
wird nur ein Objekt erzeugt (durch new).
Die eindeutige Referenz auf das Objekt wird in strA gestellt.
Der Zuweisungsoperator in der Anweisung
strB = strA; // Kopiere die Referenz nach strB.
kopiert die Information, die in strA ist nach strB.
Sie
macht keine Kopie des Objekts!
Oder um fast dasselbe zu sagen: das Kopieren einer Referenz eines Objekts, macht keine Kopie des Objekts!
Da dieselbe Information in strA wie in strB gespeichert ist,
führt jede der Variablen zu demselben Objekt.
Dies ist in etwa so, als wenn Sie Ihre Telefonnummer mehreren Leuten geben:
jede Kopie der Telefonnummer ist eine Referenz auf Sie, aber Sie gibt es nur einmal.
Das Programm wird ausgeben:
Der Gingham Hund Der Gingham Hund Dieselbe Information in jeder der Referenzvariablen.