Perché puntatore null anziché cast di classe?


26

In Java:

int count = (Integer) null;

genera un java.lang.NullPointerException.

Perché questo non genera un'eccezione Cast Class per facilitare la comprensione del programmatore?

Perché questa eccezione è stata scelta rispetto a qualsiasi altra eccezione?

Risposte:


46

Quando si esegue il codice, il runtime Java procede come segue:

  1. Trasmetti null a un oggetto di classe Intero.
  2. Prova a decomprimere l'oggetto Integer in un int chiamando il metodo intValue ()
  3. La chiamata di un metodo su un oggetto null genera una NullPointerException.

In altre parole, null può essere trasmesso a Integer senza problemi, ma un oggetto intero null non può essere convertito in un valore di tipo int.

MODIFICARE

Ho avuto una domanda correlata qualche tempo fa allo Stack Overflow, vedi qui .


1

Java esegue correttamente il null a un riferimento intero che non fa riferimento a nessun oggetto.

Va bene perché essere non associati è uno stato valido per un riferimento.

È la chiamata di un metodo di un oggetto inesistente che non può essere eseguito.

Eseguire il cast (Integer)nullequivale a dichiarare una variabile Integer e non riuscire ad assegnargli un'istanza di oggetto Integer nuova (o già esistente).


-1

Per decomprimere a Integerin a intie in int i = new Integer(15);, ieffettivamente è uguale new Integer(15).intValue() i = (Integer) o; dove Object o = 15è uguale a o = Integer.valueOf(15);ma i = null; genera un NullPointerExceptionperché iquindi equivale a null.intValue()un valore di NullPointerException.


2
La risposta che è stata accettata quasi due anni fa fornisce quasi la stessa spiegazione, ma è più chiara. Anche questa risposta non è corretta per Java 5+: ora utilizza i valueOf()metodi di fabbrica anziché creare nuove istanze per il pugilato.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.