Perché puntatore nullo anziché cast di classe?

23

In Java:

int count = (Integer) null;

lancia una java.lang.NullPointerException.

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

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

    
posta Nathan R 31.07.2012 - 19:16
fonte

3 risposte

42

Durante l'esecuzione del codice, il runtime Java effettua le seguenti operazioni:

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

In altre parole, null può essere castato su Integer senza un problema, ma un oggetto intero nullo non può essere convertito in un valore di tipo int.

Modifica

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

    
risposta data 31.07.2012 - 19:19
fonte
1

Java lancia con successo null a un riferimento Integer che non fa riferimento a nessun oggetto.

Va bene, perché essere unistantiated è uno stato valido per un riferimento.

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

L'esecuzione del cast (Integer)null equivale a dichiarare una variabile Integer e quindi non è in grado di assegnargli una nuova istanza di oggetto intero (o già esistente).

    
risposta data 16.08.2012 - 15:58
fonte
-1

Per annullare unbox di Integer in int i.e. in int i = new Integer(15); , i equivale effettivamente a new Integer(15).intValue() i = (Integer) o ; dove Object o = 15 è uguale a o = Integer.valueOf(15); ma i = null ; lancia un NullPointerException perché i è uguale a null.intValue() che genera NullPointerException .

    
risposta data 05.05.2014 - 20:42
fonte

Leggi altre domande sui tag