Chcem vykonať nejakú akciu, len ak môj reťazec má zmysluplnú hodnotu. Tak som skúsil toto.
if (!myString.equals("")) {
doSomething
}
a toto
if (!myString.equals(null)) {
doSomething
}
a toto
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
a toto
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
a toto
if ( myString.length()>0) {
doSomething
}
A vo všetkých prípadoch môj program doSomething
napriek tomu, že môj reťazec JE EMPTY. Rovná sa null
. Takže, čo je s tým zlé?
DOPLNENÉ:
Našiel som príčinu problému. Premenná bola deklarovaná ako reťazec a v dôsledku toho sa null
priradené tejto premennej zmenilo na "null"
! Takže if (!myString.equals("null"))
funguje.
if (myString != null && !myString.isEmpty()) {
// doSomething
}
Ako ďalšiu pripomienku uvádzame, že by ste si mali byť vedomí tohto termínu v zmluve equals
:
Z Object.equals(Object)
:
Pre každú nenulovú referenčnú hodnotu x
by x.equals(null)
malo vrátiť false
.
Spôsob porovnávania s null
je použiť x == null
a x != null
.
Okrem toho x.field
a x.method()
vyhodia NullPointerException
, ak x == null
.