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

时间:2010-03-01 18:20:21

标签: java nullpointerexception

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

 if (stringVariable.equals(null)){

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

在此声明中,我试图检测该字段是否具有null值,但遗憾的是它已中断!

有什么想法吗?

4 个答案:

答案 0 :(得分:32)

使用

stringVariable == null

测试stringVariablenull

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

答案 1 :(得分:11)

如果stringvariable已经为空,则它不再作为String对象存在,因此它甚至不会有.equals方法!因此,当stringvariable 为空时,您实际所做的是null.equals(null),此时您将获得NullPointerException因为null }没有.equals()方法。

答案 2 :(得分:5)

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

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

在你的特殊情况下,做

就足够了
if (stringVariable == null) {
}

使用字符串时,可以付费查看Apache Commons StringUtils

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

答案 3 :(得分:1)

equals()方法不适用于null参数。

该方法需要将对象或字符串作为参数。

public boolean equals(Object anObject)

由于null不是对象。 Is null an Object?

另请参阅java 7文档,该文档说当当且仅当传递的对象不为null时,equals将给出结果。

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)