In Java 1.5 wurde das „autoboxing“ und „auto-unboxing“ zur Sprache hinzugefügt.
Es wird jetzt automatisch von einem „primitiven“ Datentyp wie int, boolean oder double in die korrespondierenden „boxing“ Datentype wie Integer, Boolean oder Double gewandelt. Siehe Beispiel 1. Was kommt aber in Beispiel 2 raus, wenn man die Klasse ausführt?
public class Unmöglich {
private static Integer i;
public static void main(String[] args) {
// Beispiel 1
int x = new Integer(42); // Integer nach int (unboxed)
Integer y = 42; // int nach Integer (boxed)
// Beispiel 2
if (i == 42){
System.out.println("Unmögliches autoboxing!");
}
}
}
Ein Umlaut im Klassennamen ist nicht schön, aber daran liegt es nicht das eine NullPointerException geworfen wird. Es liegt daran, das i nicht initialisiert also null ist.
Der Integer i wird auto-unboxed und da er null ist kommt auch eine NPE.
Besser währe hier, i als int zu deklarieren, dann läuft es auch mit der 42 😉 und schneller und einfacher ist es auch.
Also Vorsicht, wer auto-boxing verwendet, kann auch leicht NPE zur Laufzeit bekommen.
Mehr zur 42 hier.