为什么在将String与null进行比较时会出现NullPointerException?

roc*_*kit 12 java nullpointerexception

我的代码使用nullpointerexception破坏了以下行:

 if (stringVariable.equals(null)){
Run Code Online (Sandbox Code Playgroud)

在此声明之前,我声明了stringVariable并将其设置为数据库字段.

在这个声明中,我试图检测该字段是否有null值,但不幸的是它中断了!

有什么想法吗?

Poo*_*ool 33

使用

stringVariable == null
Run Code Online (Sandbox Code Playgroud)

测试是否stringVariablenull.

equals方法(以及所有其他方法)需要stringVariable为不是null.


Jam*_*a22 12

if stringvariable已经为null,它不再作为String对象存在,所以它甚至没有.equals方法!因此,当null stringvariable null时,你真正在做的是null.equals(null),你将得到它,NullPointerException因为null没有.equals()方法.


ext*_*eon 5

在一个可能为null的变量上调用一个方法,无论是equals()还是其他方法都是不明智的.这就是为什么人们通常做的事情:

if ( var != null && var.method(something) ) {
  // var.method() was true
} else {
  // var is null or var.method is false
}
Run Code Online (Sandbox Code Playgroud)

在你的特殊情况下,这样就足够了

if (stringVariable == null) {
}
Run Code Online (Sandbox Code Playgroud)

使用Strings时,可以付费查看Apache Commons StringUtils.

检查apache commons库总是值得的,因为它们有很多优化的实用程序(对于字符串,集合,日期等),这些实用程序往往比自制的更好.