一尘不染

如何检查我的字符串是否等于null?

java

仅当我的字符串具有有意义的值时,我才想执行一些操作。所以,我尝试了这个。

if (!myString.equals("")) {
doSomething
}

还有这个

if (!myString.equals(null)) {
doSomething
}

还有这个

if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}

还有这个

if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}

还有这个

if ( myString.length()>0) {
doSomething
}

而且在所有情况下doSomething,尽管我的字符串为EMPTY,但我的程序仍然有效。等于null。那么,这有什么问题呢?

添加:

我找到了问题的原因。该变量被声明为字符串,结果,null分配给该变量的结果变为"null"!因此,if (!myString.equals("null"))作品。


阅读 323

收藏
2020-03-18

共2个答案

一尘不染

如果myString实际上为null,则对引用的任何调用都将失败,并出现Null Pointer Exception(NPE)。从Java 6开始,请使用#isEmpty而不是长度检查(在任何情况下都不要创建带有检查的新空字符串)。

if (myString != null &&  !myString.isEmpty()){
    doSomething();
}

顺便说一句,如果像你那样与String文字进行比较,则会颠倒该语句,从而不必进行空检查,即,

if ("some string to check".equals(myString)){
  doSomething();
} 

代替 :

if (myString != null &&  myString.equals("some string to check")){
    doSomething();
}
2020-03-18
一尘不染

if (myString != null && !myString.isEmpty()) {
  // doSomething
}

作为进一步的评论,你应该注意equals合同中的这一条款:

来自Object.equals(Object)

对于任何非null的参考值x,x.equals(null)应使用return false

与之比较的方法null是使用x == nullx != null

此外,x.fieldx.method()抛出NullPointerException如果x == null

2020-03-18