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:
- Welchen Wert enthält die Variable
s
? - 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.