12

Je suis nouveau à Java. Je viens de lire que les variables de classe en Java ont une valeur par défaut.Pourquoi l'utilisation d'un nombre entier Java par défaut entraîne-t-elle une exception NullPointerException?

J'ai essayé le programme suivant et je m'attendais à obtenir la sortie 0, qui est la valeur par défaut sur un entier, mais j'obtiens le NullPointerException.

Qu'est-ce qui me manque?

class Test{ 
    static Integer iVar; 

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

Bonne question! Un mélange très facile. –

Répondre

22

Vous avez raison, les variables de classe non initialisées en Java ont une valeur par défaut qui leur est affectée. Integer type en Java ne sont pas les mêmes que int. Integer est la classe wrapper qui enveloppe la valeur du type primitif int dans un objet.

Dans votre cas, iVar est une référence à un objet Integer qui n'a pas été initialisé. Les références non initialisées obtiennent la valeur par défaut null et lorsque vous essayez d'appliquer la méthode intValue() sur une référence null, vous obtenez le NullPointerException.

Pour éviter ce problème tout à fait que vous devez faire votre variable de référence référence à un objet Integer comme:

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

Merci codaddict. Cela a du sens maintenant. – user292844

1

Cela signifie que iVar est nulle. En Java, vous ne pouvez pas appeler des méthodes sur une référence nulle, cela génère l'exception NullPointerException que vous voyez.

Questions connexes