How to check if my string is equal to null?
I want to perform some action ONLY IF my string has a meaningful value. So, I tried this.
if (!myString.equals("")) {
doSomething
}
and this
if (!myString.equals(null)) {
doSomething
}
and this
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
and this
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
and this
if ( myString.length()>0) {
doSomething
}
And in all cases my program doSomething
in spite on the fact that my string IS EMPTY. It equals to null
. So, what is wrong with that?
ADDED:
I found the reason of the problem. The variable was declared as a string and, as a consequence, null
assigned to this variable was transformed to "null"
! So, if (!myString.equals("null"))
works.
Solution 1:
if (myString != null && !myString.isEmpty()) {
// doSomething
}
As further comment, you should be aware of this term in the equals
contract:
From Object.equals(Object)
:
For any non-null reference value
x
,x.equals(null)
shouldreturn false
.
The way to compare with null
is to use x == null
and x != null
.
Moreover, x.field
and x.method()
throws NullPointerException
if x == null
.
Solution 2:
If myString
is null
, then calling myString.equals(null)
or myString.equals("")
will fail with a NullPointerException
. You cannot call any instance methods on a null variable.
Check for null first like this:
if (myString != null && !myString.equals("")) {
//do something
}
This makes use of short-circuit evaluation to not attempt the .equals
if myString
fails the null check.