c ist mit einer Referenz
auf ein Stringobjekt initialisiert, das keine Zeichen enthält.
Das ist ohne jeden Zweifel ein anderer Wert als null.
Ein Stringobjekt, das keine Zeichen enthält, ist immer noch ein Objekt. Ein solches Objekt wird manchmal Leerstring genannt. Das ist ähnlich wie ein Blatt Papier zu haben im Vergleich dazu überhaupt kein Papier zu haben. Das Übersehen dieser Unterscheidung ist eine der klassischen Verwechslungen in der Programmierung. Es wird Ihnen passieren. Es passiert mir noch immer. Um sich vor zukünftigen Verwechslungen zu wappnen, studieren Sie 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 eine Referenz auf ein Stringobjekt als Parameter.
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 nicht abstürzen,
wenn sie ein null bekommt.
Aber manche Methoden werden es tun.
Üblicherweise sollten Sie sicherstellen, dass Methoden die Daten bekommen, die sie erwarten.)