以下代码片段导致我的程序抛出空指针异常,我正在努力确定原因:
private void ...(){
HierarchyForm hForm = (HierarchyForm)
Integer id = hForm.getId();
if (id != null && id.intValue() > 0){ <-- exception thrown here
...
}
.
.
.
}
当它崩溃时,"id"的值为空。我知道这可能是一件简单的事情,但我不明白为什么。
编辑:这是一个简短的程序,显示它失败了。 似乎与.intValue比较 http://ideone.com/e.js/H0Mjaf 有问题
编辑:我正在为 Java 1.6.0_45 构建
如果 id 为空,则该行不应引发 NPE。
如果 && 的第一个操作数为 false,则不会计算第二个操作数,结果只是 false。
请再次重新检查您的代码,并确保在计算 id.intValue() 时在此行上获取 NPE。
使用此格式找到正确的解决方案:
String id = request.getParameter("id");
if(id!=null && !id.toString().equalsIgnoreCase(""))
{
user.setId(Integer.parseInt(id));
dao.updateUser(user);
}
else
{
dao.addUser(user);
}
如果使用那个,否则键入格式:
String id = request.getParameter("id");
if(id == null || id.isEmpty())
{
dao.addUser(user);
}
else
{
user.setId(Integer.parseInt(id));
dao.updateUser(user);
}
很简单,放一个空检查!用 if 语句包围你的对象,比如
Object mayBeNullObj = getTheObjectItMayReturnNull();
if (mayBeNullObj != null)
{
mayBeNullObj.workOnIt(); // to avoid NullPointerException
}
但是,所有这些都给出了相同的结果。
此行导致 NPE 的唯一方法是在 null
元素上执行id.intValue()
。
如果id != null
为 false,Java 将不会执行id.intValue()
,因为&&
是执行的捷径。
我怀疑你的代码实际上看起来像这样:
if (id != null & id.intValue() > 0) {
而它应该看起来像这样:
if (id != null && id.intValue() > 0) {
你需要这样写:
private void ...(){
HierarchyForm hForm = (HierarchyForm)
Integer id = hForm.getId();
if (id != null)
if (id.intValue() > 0){ <-- exception thrown here
...
}
}
.
.
.
}
好吧,我没有考虑过 java 中的"&&"有这种行为来解决第一个表达式,而第二个表达式只有在"true"时才解决。
当然,在这种情况下,我同意同事的回应,并假设您正确发布了代码,我的猜测是这与并发访问同一对象hForm有关,某些方法可能为hForm或id分配"null"。