J'ai le code suivant:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
Pourquoi ma vérification de la variable booléenne "bool" entraîne-t-elle une exception? Ne devrait-il pas simplement sauter juste au-delà de l'instruction if quand il "voit" que ce n'est pas vrai? Lorsque je supprime l'instruction if ou que je vérifie si elle n'est PAS nulle, l'exception disparaît.
if (bool == Boolean.TRUE)
évalue false sans générer d'exception. Je ne sais pas si c'était intentionnel dans le cas que je viens de trouver.bool
êtrenull
OU siBoolean
était construit explicitement (et non comme référence àBoolean.TRUE
). Donc pas recommandé; par opposition àif (Boolean.TRUE.equals(bool))
ce qui fonctionnerait comme prévu, y compris lanull
valeur de manutention en toute sécurité .Réponses:
Lorsque vous avez un,
boolean
cela peut être soittrue
oufalse
. Pourtant, lorsque vous avez un,Boolean
cela peut être l'un ou l' autreBoolean.TRUE
,Boolean.FALSE
ounull
comme n'importe quel autre objet.Dans votre cas particulier, votre
Boolean
estnull
et l'if
instruction déclenche une conversion implicite enboolean
qui produit leNullPointerException
. Vous devrez peut-être à la place:la source
Boolean
peut être n'importe quel nombre d'instances vraies, pas seulementBoolean.TRUE
. Par exemplenew Boolean(true)
.if (myBoolean)
(oùmyBoolean
estBoolean
) ne déclenche pas une erreur de compilation ou au moins un avertissement. C'est un piège à coup sûr.Si vous n'aimez pas les vérifications nulles supplémentaires:
la source
Utilisez Apache BooleanUtils .
(Si les performances de pointe sont la priorité la plus importante de votre projet, examinez l'une des autres réponses pour une solution native qui ne nécessite pas l'inclusion d'une bibliothèque externe.)
Ne réinventez pas la roue. Tirez parti de ce qui a déjà été construit et utilisez
isTrue()
:Vérifie si une
Boolean
valeur est vraie, gestionnull
par retourfalse
.Si vous n'êtes pas limité aux bibliothèques que vous êtes "autorisé" à inclure, il existe un tas de fonctions d'aide pour toutes sortes de cas d'utilisation, y compris
Booleans
etStrings
. Je vous suggère de parcourir les différentes bibliothèques Apache et de voir ce qu'elles offrent déjà.la source
toStringYesNo
cette bibliothèque dans toutes mes applications.Boolean
types peuvent êtrenull
. Vous devez effectuer unenull
vérification telle que vous l'avez définienull
.la source
Ou avec la puissance de Java 8 en option, vous pouvez également faire une telle astuce:
:)
la source
Boolean est la classe de wrapper d'objet pour le booléen primitif. Cette classe, comme toute classe, peut en effet être nulle. Pour des raisons de performances et de mémoire, il est toujours préférable d'utiliser la primitive.
Les classes wrapper de l'API Java ont deux objectifs principaux:
http://en.wikipedia.org/wiki/Primitive_wrapper_class
la source
comme votre variable booléenne pointe vers une valeur nulle, vous obtiendrez toujours une exception NullPointerException, vous devez d'abord initialiser la variable quelque part avec une valeur non nulle, puis la modifier.
la source
catch
bloc gérerait l'exception NullPointerException. Le problème ici est que l'OP tente de déballer une référence nulle en primitive.null
et son test. Le vrai code ne serait probablement pas aussi simple ou leif
test entier pourrait être supprimé.