仅当我的字符串具有有意义的值时,我才想执行一些操作。所以,我尝试了这个。
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。那么,这有什么问题呢?
doSomething
null
添加:
我找到了问题的原因。该变量被声明为字符串,结果,null分配给该变量的结果变为"null"!因此,if (!myString.equals("null"))作品。
"null"
if (!myString.equals("null"))
如果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(); }
if (myString != null && !myString.isEmpty()) { // doSomething }
作为进一步的评论,你应该注意equals合同中的这一条款:
equals
来自Object.equals(Object):
Object.equals(Object)
对于任何非null的参考值x,x.equals(null)应使用return false。
x,x.equals(null)
return false
与之比较的方法null是使用x == null和x != null。
x == null
x != null
此外,x.field并x.method()抛出NullPointerException如果x == null。
x.field
x.method()
NullPointerException