2010-06-22 4 views
1

J'ai la fonction foo() qui retourne true/false/null.Java: java.lang.NullPointerException at booleanValue()

Je possède ce morceau de code:

Boolean flag = foo(); 
if (flag != null){ 
..... 
} 

Lors de l'inspection de la déclaration if, je reçois l'exception suivante: java.lang.NullPointerException at booleanValue()

Semble qu'il tente d'évaluer sa valeur primitive et la comparer. Cependant, c'est ce que je ne veux pas qu'il fasse. Je veux vérifier si elle est initialisée ...

Des idées?

Merci

+1

Le code que vous avez montré devrait être bon - je soupçonne que votre problème est ailleurs. Veuillez montrer un programme court mais * complet * qui démontre le problème. Alternativement, il peut s'agir de la façon dont vous effectuez "l'inspection". Est-ce que le code * s'exécute * comme vous le souhaitez? Est-ce juste un problème de débogueur? Si oui, comment déboguez-vous et dans quel débogueur? –

+0

Etes-vous sûr de ça? S'il vous plaît poster le code réel (avec les numéros de ligne!) Et le stacktrace exception réelle. –

+0

Certainement pas en utilisant! = False? Comment inspectez-vous la déclaration? Votre débogueur peut être en train de le convertir en booléen lorsque vous inspectez. –

Répondre

3
Boolean flag = null; 
    if (flag != null){ 
     System.out.println("BLuh"); 
    } 

Ce code fonctionne bien - si le problème est defenetly ailleurs.

+0

Merci les gars, Code simple Boolean flag = null; si (indicateur! = Null) ... sinon ... Fonctionne pour moi aussi. C'est assez étrange mais j'ai compris un workaroung. Quand j'aurai le temps j'y reviendrai et posterai et la solution ici. Merci :) – Yura

2

L'erreur indique que quelque chose comme cela se produit:

Boolean iAmNothing = null; 
boolean crash = iAmNothing.booleanValue(); // throws NPE 

ou avec outboxing (Java 1.5+):

Boolean iAmNothing = null; 
boolean crash = iAmNothing;    // throws NPE 

L'extrait de code montre aucun de ces problèmes, de sorte que le NPE soit se produit ailleurs à l'intérieur du bloc derrière la déclaration if ou peut-être que vous n'utilisez pas le SUN jdk mais un autre avec un comportement différent!

Questions connexes