zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

(Denkfrage: ) Könnten zwei verschiedene Objekte äquivalente (gleiche) Daten enthalten?

Antwort:

Ja. Die Objekte würden aus verschiedenen Speicherbytes konstruiert werden, aber die gleichen Werte enthalten.

Zwei Objekte mit äquivalenten Inhalten

Erinnert Euch daran, dass Objekte (1) Identität, (2) Zustand und (3) Verhalten haben. Identität bedeutet, dass jedes Objekt ein eindeutiges Ganzes ist, ganz gleich wie sehr es einem anderen gleicht. Hier ist ein Programm, das diese Situation zeigt:

class StringBsp6
{
  public static void main ( String[] args )
  {
    String strA;  // Referenz auf das erste Objekt
    String strB;  // Referenz auf das zweite Objekt

    strA = new String( "Der Gingham Hund" );   // das erste Objekt erzeugen
                                               // seine Referenz speichern
    System.out.println( strA );

    strB = new String( "Der Gingham Hund" );   // das zweite Objekt erzeugen
                                                // seine Referenz speichern
    System.out.println( strB );

    if ( strA == strB )
      System.out.println( "Dies wird nicht ausgegeben werden.");
  }

}

In diesem Programm gibt es zwei Objekte, jedes ist ein eindeutiges Ganzes.

Jedes Objekt enthält Daten, die äquivalent zu denen des Anderen sind. Jedes Objekt besteht aus einem Teil Arbeitsspeicher, der unabhängig von dem ist, der das andere Objekt ausmacht.

Die Variable strA enthält eine Referenz auf das erste Objekt und die Variable strB enthält eine Referenz auf das zweite Objekt.

Da die Information in strA von der Information in strB verschieden ist, ist

( strA == strB )

false, (genau wie in dem vorherigen Programm mit zwei Objekten.) Da es zwei Objekte gibt, gemacht aus zwei verschiedenen Abschnitten des Arbeitsspeichers, unterscheidet sich die Referenz, die in strA gespeichert ist, von der Referenz in strB. Es spielt keine Rolle, dass die Daten innerhalb der Objekte gleich sind.

FRAGE 18:

Was wird dieses Beispielprogramm auf den Bildschirm ausgeben?