web-dev-qa-db-fra.com

Pourquoi un pointeur nul au lieu d'un cast de classe?

En Java:

int count = (Integer) null;

lève une exception Java.lang.NullPointerException.

Pourquoi cela ne déclenche-t-il pas une exception de classe Cast pour faciliter la compréhension du programmeur?

Pourquoi cette exception a-t-elle été choisie par rapport à toute autre exception?

26
Nathan R

Lors de l'exécution de votre code, le runtime Java Java effectue les opérations suivantes:

  1. Cast null à un objet de classe Integer.
  2. Essayez de décompresser l'objet Integer dans un int en appelant la méthode intValue ()
  3. L'appel d'une méthode sur un objet nul lève une NullPointerException.

En d'autres termes, null peut être converti en entier sans problème, mais un objet entier nul ne peut pas être converti en une valeur de type int.

[~ # ~] modifier [~ # ~]

J'ai eu une question connexe il y a un moment chez Stack Overflow, voir ici .

47
Giorgio

Java convertit avec succès null en une référence entière qui ne fait référence à aucun objet.

C'est OK car le fait de ne pas être différencié est un état valide pour une référence.

C'est l'appel d'une méthode d'un objet non existant qui ne peut pas être effectuée.

Exécution du casting (Integer)null revient à déclarer une variable Integer et à ne pas lui affecter une nouvelle instance d'objet Integer (ou déjà existante).

1
Tulains Córdova