检查整数值是否为空时出现 Java 异常



以下代码片段导致我的程序抛出空指针异常,我正在努力确定原因:

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"。

相关内容

  • 没有找到相关文章