Je veux effectuer une action UNIQUEMENT SI ma chaîne a une valeur significative. J'ai donc essayé ceci.
if (!myString.equals("")) {
doSomething
}
et ceci
if (!myString.equals(null)) {
doSomething
}
et ceci
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
et ceci
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
et ceci
if ( myString.length()>0) {
doSomething
}
Et dans tous les cas, mon programme "fait quelque chose" malgré le fait que ma chaîne est vide. Elle est égale à null
. Alors, quel est le problème ?
ADDED:
J'ai trouvé la raison du problème. La variable a été déclarée comme une chaîne de caractères et, en conséquence, null
assigné à cette variable a été transformé en "null"
! Donc, if (!myString.equals("null" ;))
fonctionne.
if (myString != null && !myString.isEmpty()) {
// doSomething
}
En guise de commentaire supplémentaire, vous devriez être conscient de ce terme dans le contrat equals
:
Pour toute valeur de référence non nulle
x
,x.equals(null)
doitretourner false
.
La façon de comparer avec null
est d'utiliser x == null
et x != null
.
De plus, x.field
et x.method()
lancent NullPointerException
si x == null
.