【问题标题】:Java Null check fails and code proceeds to if statementJava Null 检查失败,代码继续执行 if 语句
【发布时间】:2021-10-14 04:12:51
【问题描述】:

我的代码中有一个if 条件,如果变量的值为Null,我不希望我的代码继续进入if 条件,但由于某种原因,条件通过并进入下一部分但该字段的值为NULL

我不确定为什么会出现这个问题。类似的方法适用于其他领域,但不适用于该领域:

if (myField != null) {
 System.out.println("WITHIN IF : " + myField);
//prints null
}

我研究了一下,尝试了几件事:

if(!Objects.isNull(myField))

在以下情况下,条件不成立,表明java.lang.NullPointerException: Cannot invoke "String.equalsIgnoreCase(String)" because the return value of toString() is null

if(myField != null && myField.toString().equals("null"))
if(myField != null && myField.toString().equalsIgnoreCase("null"))

我不明白这里出了什么问题。该值为空,但检查失败并且它在我的If 条件内。如果我尝试转换为toString(),那么它会说该值为空。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 听起来你 myField 是某种对象,其 toString() 方法返回 null。这就是“toString() 的返回值为 null”告诉你的。您应该修复 toString() 方法,使其不会返回 null。
  • myField.toString() 返回什么?你可能对null也有误解。 null 不等于 "null"(字符串)。
  • @khelwood 非常感谢您的回答。它实际上是枚举,它被分配了null,所以它失败了。非常感谢它的解释。

标签: java string if-statement null tostring


【解决方案1】:

当 java 计算 "WITHIN IF : " + myField 表达式的值时,它会在 myField 对象上调用 toString 方法。

它可以返回字符串"null",也可以返回实际的null 引用。在这两种情况下,您都会得到"WITHIN IF : null"

PS:你手头有第二个案例。

【讨论】:

  • @khelwood 非常感谢您的回答。它实际上是枚举,它被分配了null,所以它失败了。非常感谢它的解释。
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 2017-12-30
  • 2017-03-03
  • 1970-01-01
相关资源
最近更新 更多