12

Soy nuevo en Java. Acabo de leer que las variables de clase en Java tienen un valor predeterminado.¿Por qué el uso de un valor entero en Java de valor predeterminado da como resultado una NullPointerException?

Probé el siguiente programa y esperaba obtener el resultado como 0, que es el valor predeterminado en un entero, pero obtengo el NullPointerException.

¿Qué me estoy perdiendo?

class Test{ 
    static Integer iVar; 

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

¡Buena pregunta! Una confusión muy fácil. –

Respuesta

22

Tiene razón, las variables de clase no inicializadas en Java tienen un valor predeterminado asignado. Integer tipo en Java no son lo mismo que int. Integer es la clase contenedora que ajusta el valor del tipo primitivo int en un objeto.

En su caso iVar es una referencia a un objeto Integer que no se ha iniciado. Las referencias no inicializadas obtienen el valor predeterminado de null y cuando intenta aplicar el método intValue() en una referencia nula obtiene el NullPointerException.

Para evitar este problema por completo lo que necesita para que su variable de referencia se refieren a un objeto Integer como:

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

Gracias codaddict. Tiene sentido ahora. – user292844

1

Significa que iVar es nulo. En Java, no puede invocar métodos en una referencia nula, genera la NullPointerException que está viendo.

Cuestiones relacionadas