Skip to main content

Der Wert null

In Java können wir Variablen deklarieren, ohne diese direkt auch zu initialisiere. Zum Beispiel können wir mit folgendem Code eine Variable s definieren, die vom Type String ist:

String s;

Da es sich bei Strings um Referenztypen handelt, wissen wir, dass in der Variable s eine Adresse gespeichert sein muss. Es stellt sich nun folgende Fragen:

  1. Welchen Wert enthält die Variable s?
  2. Wie können wir unterscheiden, ob es sich um eine gültige Adresse handelt, die in der Variable gespeichert ist?

Damit wir diese Fragen beantworten können, definiert Java einen ganz speziellen Wert, nämlich null. null wird immer dann verwendet, wenn ein Referenzdatenyp auf keine gültige Adresse verweist, also noch kein gültiges Objekt repräsentiert. Obige Deklaration wäre also gleichbedeutend wie

String s = null;

Sie könnten sich jetzt Fragen, was denn der Datentyp von null ist. Die Antwort ist null. null ist sowohl ein Datentyp als auch ein Wert. null ist der einzige Wert des Datentyps null. Im Gegensatz zu anderen Datentypen in Java, können wir den Wert null einer Variable von beliebigem Typ zuweisen, solange es sich um einen Referenzdatentyp handelt. Folgende Deklarationen wären also alle gültig:

String s = null;
Integer i = null;
int[] a = null;

null wird immer dann verwendet, wenn wir sonst keinen passenden Wert finden könnten. Betrachten Sie zum Beispiel folgende Methode, die das längste Wort in einem Text zurückgibt:

public static String longestWordInText(String[] text) {
String longestWord = null;
for (int i = 0; i < text.length; i = i + 1) {
if ((i == 0) || (text[i].length() > longestWord.length())) {
longestWord = text[i];
}
}
return longestWord;
}

Wenn der übergebene Text leer ist (also ein leeres Array übergeben wird), dann gibt es kein längstes Wort. In solchen Fällen wird in Java häufig der Wert null zurückgeben. Die aufrufende Methode müsste dann natürlich überprüfen, ob ein gültiges Wort, oder null zurückgegeben wurde:

String[] text  = new String[]{"baum", "krone", "elster"};
String longestWord = longestWordInText(text);
if (longestWord == null) {
System.out.println("Es gibt kein längstes Wort");
} else {
System.out.println("Das längste Wort ist " +longestWord);
}

Anmerkung: Probleme mit null

Die obige Methode longestWordInText entspricht ganz typischem Java Code. Leider ist dieser Einsatz von null aber auch gefährlich. Der Aufrufer einer Methode kann nämlich anhand der Methodensignatur gar nicht erkennen, ob die Methode null zurückgeben kann. null ist ja zu jedem Datentyp kompatibel. Wenn nun eine Methode null zurückgibt, ohne dass der Programmierer den Rückgabewert explizit auf null überprüft, kann es sein, dass dieser versucht mit dem Wert null weiterzurechnen. Dies führt zu der berüchtigten NullPointerException und einem Programmabsturz. In der modernen Programmierung versucht man deshalb solche null Werte möglichst nicht einzusetzen. Wir werden später Alternativen dazu kennenlernen.


Haben Sie Fragen oder Bemerkungen? Schreiben Sie diese doch ins Forum.