zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

c ist mit einer Referenz auf ein Stringobjekt initialisiert, das keine Zeichen enthält. Das ist zweifellos ein anderer Wert als null.

Der Leerstring

Ein Stringobjekt, das keine Zeichen enthält, ist immer noch ein Objekt. Ein solches Objekt wird Leerstring genannt. Das ist in etwa damit vergleichbar ob man ein leeres Blatt Papier hat oder ob man überhaupt kein Papier hat. Das Übersehen dieses Unterschieds ist eine der klassischen Verwechslungen in der Programmierung. Es wird Euch passieren. Um uns vor zukünftigen Verwechslungen zu wappnen, studieren wir das Programm, Schritt für Schritt:

class NullDemo1
{
  public static void main (String[] arg)
  {
    String a = "Zufaellige Notizen"; // 1.  Ein Objekt wird erzeugt;
                                     //     die Variable a verweist darauf.
    String b = null;                // 2.  Die Variable b verweist
                                     //    auf kein Objekt.
    String c = "";                   // 3.  Ein Objekt wird erzeugt
                                     //     (es enthält keine Zeichen);
                                     //     die Variable c verweist darauf.

    if ( a != null )                 // 4.  ( a != null ) ist true, also
       System.out.println( a );      // 5.  wird println( a ) ausgeführt.

    if ( b != null )                 // 6.  ( b != null ) ist false, also
       System.out.println( b );      // 7.  wird println( b ) ausgelassen.

    if ( c != null )                 // 8.  ( c != null ) ist true, also
       System.out.println( c );      // 9.  wird println( c ) ausgeführt.
                                     // (Aber es gibt keine Zeichen zum Ausgeben.)
  }
}

Die System.out.println() Methode erwartet als Parameter eine Referenz auf ein Stringobjekt. Das Beispielprogramm überprüft, ob jede Variable eine Stringreferenz enthält bevor es die println() Methode mit ihr aufruft. (Tatsächlich wird die println() Methode, wenn sie ein null bekommt, null ausgeben. Aber andere Methoden werden das nicht tun und eine Ausnahme auswerfen. Üblicherweise sollten wir sicherstellen, dass Methoden die Daten bekommen, die sie erwarten.)

FRAGE 6:

Wir prüfen den folgenden Codeschnipsel:

String alpha = "Dempster Dumpster";

alpha = null;

. . .
  1. Wo wird ein Objekt konstruiert?
  2. Was wird aus diesem Objekt?