来自 if 语句的奇怪的 NullPointerException

Weird NullPointerException from if statement

我有一个 if 语句 returning NullPointerException。

原因:比较两个对象,其中一个为null:

Object obj;
if (obj.toString.equals("string"))
   { //do something }
else
   { //do another something }

我怎么知道 obj 是空的? 如果我尝试打印该对象 (System.out.println(obj.toString()),逻辑上我也会得到一个 NullPointer。当我点击错误时,它没有选择 if 语句对应的行,而是选择了我的 System.out 语句,表明错误源是我的对象(另外,我很清楚对象是否 return s 在我的数据库中为 null,在我的例子中,“null”关键字出现在我的语句中“string”的位置。

考虑到我确实知道我的 obj 为空(即使通过检查它在我的数据库中为空),不可能将它与另一个对象进行比较,因为显然 if 语句是当其中之一为空时无法比较对象.

我通过检查以下代码(如上所述)知道:

Object obj;
        if (obj.toString.equals(null))
           { //do something }

该语句 return 不应该是真的吗? 因为它没有执行 if 块中的内容。

主要是,编译器读到if (obj.toString.equals("string"))的时候,因为是false(因为obj不等于" string") 应该落入我的 else 块,但那没有发生。


Any thoughts?


例如,当我说我单击错误并将我带到 if 语句行(或我的 System.out 行,用于对象验证)时,这就是我的意思:

您需要明确检查文字值 null。在下面的示例中,如果非空检查失败,则不会执行 运行 && 之后的语句;第一个检查短路表达式的其余部分

Object obj;
if (obj != null && obj.toString().equals("string")) { 
  //do something 
}
else { 
  //do another something 
}

注:

  • null是一个字面值(类似于true和false)。所以你不应该像 String.
  • 那样比较它