2010-03-13 11 views
12

Sono nuovo di Java. Ho appena letto che le variabili di classe in Java hanno un valore predefinito.Perché l'utilizzo di un valore intero Java in valori predefiniti genera un valore NullPointerException?

Ho provato il seguente programma e mi aspettavo di ottenere l'output come 0, che è il valore predefinito su un numero intero, ma ottengo il NullPointerException.

Cosa mi manca?

class Test{ 
    static Integer iVar; 

    public static void main(String...args) { 
     System.out.println(iVar.intValue()); 
    } 
} 
+0

Ottima domanda! Un mix molto semplice. –

risposta

22

Hai ragione, le variabili di classe non inizializzate in Java hanno un valore predefinito assegnato a loro. Il tipo Integer in Java non è uguale a int. Integer è la classe wrapper che racchiude il valore del tipo primitivo int in un oggetto.

Nel tuo caso iVar è un riferimento a un oggetto Integer che non è stato inizializzato. I riferimenti non inizializzati ottengono il valore predefinito di null e quando si tenta di applicare il metodo intValue() su un riferimento null si ottiene NullPointerException.

Per evitare questo problema del tutto il necessario per rendere la vostra variabile di riferimento si riferiscono a un oggetto Integer come:

class Test { 
// now iVar1 refers to an integer object which wraps int 0. 
static Integer iVar1 = new Integer(0); 

// uninitialized int variable iVar2 gets the default value of 0. 
static int iVar2; 

public static void main(String...args) { 
    System.out.println(iVar1.intValue()); // prints 0. 
    System.out.println(iVar2); // prints 0. 
} 
} 
+0

Grazie codaddict. Ha senso ora. – user292844

1

Significa che iVar è nullo. In java, non puoi invocare metodi su un riferimento null, genera NullPointerException che stai vedendo.

Problemi correlati