2010-10-30 19 views
15

J'essaie d'utiliser un dictionnaire. Chaque fois que je veux vérifier si un élément est présent dans le dictionnaire, je fais ceci:Impossible de vérifier si int est nul

int value = results.get("aKeyThatMayOrMayNotBePresent"); 

if (value != null) 
    // ... 

Mais le compilateur dit que je ne peux pas comparer un int à un <nulltype>. Quelle est la bonne façon de vérifier null dans ce cas?

Répondre

24

Vous comparez une valeur primitive (int) à null. Puisque les primitives ne peuvent pas être nulles, vous devez utiliser un objet correspondant, tel que Integer dans ce cas. Donc, vous devriez écrire

Integer value = results.get("aKeyThatMayOrMayNotBePresent"); 
2

int est un type primitif; vous pouvez comparer un java.lang.Integer à null.

1

Obtenez le Object et vérifier si cela est nul.

Object valueObj = results.get("..."); 
if (valueObj != null) 
{ 
    Integer value = (Integer)valueObj; 
} 
18

Votre vérification de null est trop tardive.

int value = results.get("aKeyThatMayOrMayNotBePresent"); 

Cette ligne convertit déjà la référence à une int primitive. Il lancera une exception NullPointerException si la valeur de retour de get est nulle. La méthode correcte serait d'utiliser Integer au lieu de int.

Integer value = results.get("aKeyThatMayOrMayNotBePresent"); 

Cette valeur n'est pas un type primitif et votre vérification NULL est valide.

1

Vous devez utiliser Map au lieu de Dictionary, Dictionary est obsolète.

Avec Map vous pouvez utiliser containsKey() à la place, ce qui à mon avis est plus lisible:

if (results.containsKey(key)) 
{ 
    int value = results.get(key); 
    [...] 
} 

Dans mon expérience, ce n'est pas plus lent que votre approche, en dépit de l'double accès apparent à la carte. Si cela est assez souvent exécuté pour que les performances soient importantes, il est optimisé.