Comment vérifier une chaîne de contre null en java?
Comment puis-je vérifier une chaîne de contre null en java? Je suis à l'aide de
stringname.equalsignorecase(null)
mais cela ne fonctionne pas.
Vous devez vous connecter pour publier un commentaire.
string == null
compare si l'objet est null.string.equals("foo")
compare la valeur à l'intérieur de cet objet.string == "foo"
ne fonctionne pas toujours, parce que vous essayez de voir si les objets sont les mêmes, pas les valeurs qu'ils représentent.Plus de réponse:
Si vous essayez cela, il ne fonctionne pas, comme vous l'avez trouvé:
La raison en est que foo est nulle, de sorte qu'il ne sait pas quoi .est égal à est; il n'y a aucun objet pour .équivaut à être appelé à partir.
Ce que vous avez probablement voulu, c'était:
Typique de la façon de vous protéger contre une valeur null lorsque l'on traite avec des Chaînes est:
De cette façon, si toto est nulle, il n'a pas d'évaluer la seconde moitié du conditionnel, et les choses sont tous de droite.
Le moyen le plus facile, si vous utilisez une Chaîne littérale (au lieu d'une variable), est:
Si vous souhaitez travailler autour de cela, Apache Commons dispose d'une classe - StringUtils - qui fournit null sécurité de la Chaîne des opérations.
Une autre réponse a été plaisante, et dit que vous devriez faire ceci:
S'il vous plaît ne pas le faire. Vous ne devez lancer des exceptions pour les erreurs qui sont exceptionnelles; si vous vous attendez à une valeur null, vous devriez vérifier pour qu'elle avance, et ne le laissez pas jeter l'exception.
Dans ma tête, il y a deux raisons à cela. Tout d'abord, les exceptions sont lents; la vérification par rapport à null est rapide, mais lorsque la JVM déclenche une exception, il prend beaucoup de temps. Deuxièmement, le code est beaucoup plus facile à lire et à maintenir si vous venez de vérifier le pointeur null à l'avance.
string == "foo"
ne fonctionne jamais".ne fonctionne pas?
equals()
si vous voulez comparer les valeurs. Mais si vous voulez vérifier si une variable estnull
, vous utilisez==
.Assurer qu'il fonctionne. Il vous manque une partie essentielle de la code. Vous avez juste besoin de faire comme ceci:
😉
Utilisation TextUtils Méthode.
TextUtils.isEmpty(str) : Retourne true si la chaîne est null ou 0-longueur.
Paramètres:
str la chaîne pour être examiné
Retourne:
vrai si str est null ou de longueur zéro
Ci-dessous est le code source de cette méthode
Si nous regardons la mise en œuvre de la equalsIgnoreCase méthode, nous trouvons cette partie:
Donc, il retournera toujours la
false
si l'argument estnull
. Et c'est évidemment le droit, parce que le seul cas où il doit retournertrue
est quand equalsIgnoreCase a été appelée sur unnull String
, maisproduira certainement une NullPointerException.
De manière égale les méthodes ne sont pas conçus pour tester si un objet est null, juste parce que vous ne pouvez pas invoquer sur
null
.Cela semble un peu étrange, mais...
Jamais eu aucun problème, et le faisant de cette manière, en plus c'est un moyen plus sûr de vérifier tout en évitant de potentiel de point zéro des exceptions.
Je ne suis pas sûr de ce qui va mal avec La MYYN de réponse.
Ci-dessus null check est tout à fait correct.
Si vous essayez de vérifier si une Chaîne de référence est égal (en ignorant les cas) à une autre chaîne que vous savoir n'est pas une référence nulle, alors faites quelque chose comme ceci:
Si il y a un doute quant à savoir si ou non vous avez des références nulles pour les deux Chaînes que vous comparez, vous aurez besoin de vérifier une référence null sur au moins l'un d'entre eux afin d'éviter la possibilité d'une NullPointerException.
Si votre chaîne de valeur "null, alors vous pouvez utiliser
de l'importer dans votre classe
de l'utiliser ensuite, ils seront tous les deux de retour de la vraie
Vous pouvez vérifier avec String == null
Cela fonctionne pour moi
Bien sûr user351809,
stringname.equalsignorecase(null)
va jeter NullPointerException.Voir, vous avez un objet de type string
stringname
, qui suit 2 conditions:-stringname
a un certains non-nulle de la chaîne de valeur (par exemple "ordinateur"):Votre code ne fonctionne correctement qu'il prend la forme
"computer".equalsignorecase(null)
et vous obtenez la réponse attendue comme
false
.stringname
a unnull
valeur:Ici votre code sera coincé, comme
null.equalsignorecase(null)
Toutefois, semble bon au premier coup d'oeil et vous pouvez espérer de réponse que
true
,mais,
null
n'est pas un objet qui peut exécuter leequalsignorecase()
méthode.Par conséquent, vous obtenez l'exception en raison de cas 2.
Ce que je vous propose est d'utiliser simplement
stringname == null
Méthode Simple:
Si le
value
retournée est null, utilisez:Parfois pour vérifier null,
if(value == null)
en java, il pourrait ne pas faire de vrai, même la Chaîne est nulle.if(value.isEmpty())
donneNullPointerException
. Dans ce cas, il vaut mieux utiliserif(value == null)
J'ai réalisé que c'était répondu il y a longtemps, mais je n'ai pas vu cette posté, donc je pensais que je voudrais partager ce que je fais. Ce n'est pas spécialement bon pour la lisibilité du code, mais si vous êtes d'avoir à faire une série de nulle vérifie, j'aime utiliser:
Dans cet exemple, la garniture est appelée sur la chaîne, ce qui permettrait de jeter un NPE si la chaîne est nulle ou des espaces, mais sur la même ligne, vous pouvez vérifier la valeur null ou vide de sorte que vous ne finissent pas avec une tonne de (plus) difficile de format si des blocs.
Avec Java 7, vous pouvez utiliser
qui sera de retour
true
si les deux paramètres sontnull
.Bien, la dernière fois que quelqu'un a posé cette question stupide, la réponse a été:
Cette "solution" ne cache plus le problème de comment
null
devient"null"
en premier lieu, si.Il y a deux façons de le faire..Dire String==null ou chaîne.equals()..
Vérifier cet exemple..Voici un autre exemple de raccourci version de if Else..