it-swarm.com.de

Warum Nullzeiger statt Klassenbesetzung?

In Java:

int count = (Integer) null;

löst eine Java.lang.NullPointerException aus.

Warum löst dies keine Class Cast-Ausnahme aus, um das Verständnis der Programmierer zu erleichtern?

Warum wurde diese Ausnahme einer anderen Ausnahme vorgezogen?

26
Nathan R

Bei der Ausführung Ihres Codes führt die Laufzeit Java Laufzeit) Folgendes aus:

  1. Wirf null in ein Objekt der Klasse Integer.
  2. Versuchen Sie, das Integer-Objekt durch Aufrufen der Methode intValue () in ein int zu entpacken.
  3. Das Aufrufen einer Methode für ein Nullobjekt löst eine NullPointerException aus.

Mit anderen Worten, null kann problemlos in eine Ganzzahl umgewandelt werden, ein ganzzahliges Nullobjekt kann jedoch nicht in einen Wert vom Typ int konvertiert werden.

[~ # ~] edit [~ # ~]

Ich hatte vor einiger Zeit eine verwandte Frage bei Stack Overflow, siehe hier .

47
Giorgio

Java wandelt erfolgreich null in eine Ganzzahlreferenz um, die auf kein Objekt verweist.

Das ist in Ordnung, weil Unverfälschtheit ein gültiger Status für eine Referenz ist.

Es ist der Aufruf einer Methode eines nicht vorhandenen Objekts, die nicht ausgeführt werden kann.

Darstellen der Besetzung (Integer)null entspricht dem Deklarieren einer Integer-Variablen und dem Nichtzuweisen einer neuen (oder bereits vorhandenen) Integer-Objektinstanz.

1