【问题标题】:Java null pointer exception after checking if null检查是否为空后的Java空指针异常
【发布时间】:2015-07-15 07:51:43
【问题描述】:

谁能解释我怎么可能从这行代码中抛出空指针异常:

if (data != null && data.isActive()) {

方法体 isActive() 只是:

public Boolean isActive() 
{
  return active;
}

提前致谢。

【问题讨论】:

  • NPE 是否有可能在method() 内或被method() 抛出?
  • 编辑您的问题并添加方法()源
  • 数据可能不为空,但method() 可能会抛出 NPE。发布 method() 代码。
  • 您的isActive 方法返回booleanactiveBoolean(包装器)吗?
  • 您的active 变量为空,java 在尝试将空值拆箱时得到 NPE

标签: java


【解决方案1】:

在 java 中,有一种叫做 autoboxing 的东西,当原始值被对象类型包装时,反之亦然。

所以,在你的代码中有一个方法:

public Boolean isActive() 
{
  return active;
}

注意,您返回的是Boolean(对象类型),而不是boolean(原始类型)。

并且返回值将用于您的 if 语句中。

if (data != null && data.isActive()) {

当 java 在您的 if 语句中遇到 data.isActive() 时,它会尝试将布尔值转换为原始布尔值,以将其应用于您的逻辑运算。

但是isActive() 方法中的active 变量为空,因此java 无法将此变量拆箱为boolean 原始值,而您会得到Null pointer exception

【讨论】:

  • 谁反对我的回答,请发表评论,让我知道我的假设有什么问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多