在意外的地方遇到java.lang.NullPointerException

时间:2015-04-01 17:40:39

标签: java android

我对这个问题感到困惑: 是否存在以下三行中的第一行可以产生java.lang.NullPointerException的情况?

if (mJobs == null || mJobs.size() == 0) { <-- trace shows exception here
    return null;
}

此例外情况出现在未经验证的Android 4.4.4手机上。 mJobs声明如下:

ArrayList<Job> mJobs;

任何想法都将受到高度赞赏。

更新:这次崩溃发生了数次运行一次。

5 个答案:

答案 0 :(得分:3)

我认为您的NullPointerException没有任何方式来自第一行代码。我打赌你运行的代码是从你正在寻找的不同版本的源代码编译的,让你相信错误与实际不同。我会重新编译你当前的代码,然后重新运行它。

答案 1 :(得分:1)

不,假设您使用的是java.util.ArrayList,而不是您自己的实施。

使用isEmpty()代替size() == 0会更清楚。我还会检查这个代码是如何被调用的,因为你在这两种情况中都返回null

答案 2 :(得分:0)

编辑说java&#34;短路&#34;评估永远不应该导致mJobs.size()被评估,你可以尝试它,看看它是否失败。

if (mJobs == null) {
    return null;
}
if (mJobs.size() == 0) { <-- trace shows exception here
    return null;
} 

答案 3 :(得分:0)

如果mJobs为null,则可以在mjobs.size()中抛出空指针异常

if (mJobs == null || (mJobs !=null && mJobs.size() == 0)) { 
    return null;
}

答案 4 :(得分:0)

问题是或者当然,或者意味着它所说的,所以运行时正在评估该方面的两个方面,或者在继续之前是真实的。在评估中不会发生短路,因此如果使用三元运算,可以将它们组合在一起进行短路评估。与拆分它们的工作原理相同,只是更短。

if (mJobs == null ? true : mJobs.size() == 0) { 
    return null;
}