以下代码片段导致我的程序抛出一个空指针异常,我正在努力确定原因:
private void ...(){
HierarchyForm hForm = (HierarchyForm)
Integer id = hForm.getId();
if (id != null && id.intValue() > 0){ <-- exception thrown here
...
}
.
.
.
}
当它崩溃时,“id”的值为null。我知道这可能很简单,但我不明白为什么。
编辑:这是一个简短的程序,显示它失败了。似乎是.intValue比较http://ideone.com/e.js/H0Mjaf
的问题编辑:我正在为java 1.6.0_45构建
答案 0 :(得分:0)
如果id为null,则该行不应该抛出NPE。
如果&amp;&amp;的第一个操作数如果为false,则不评估第二个操作数,结果只是false。
请再次检查您的代码并确保在评估id.intValue()时您正在获取NPE。
答案 1 :(得分:0)
使用此格式并找到正确的解决方案:
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
}
但是,所有人都给出了同样的结果。
答案 2 :(得分:0)
此行导致NPE的唯一方法是在id.intValue()
元素上执行null
。
如果id.intValue()
为false,Java将不会执行id != null
,因为&&
正在缩短执行时间。
我怀疑你的代码实际上是这样的:
if (id != null & id.intValue() > 0) {
虽然看起来像这样:
if (id != null && id.intValue() > 0) {
答案 3 :(得分:-3)
你需要这样写:
private void ...(){
HierarchyForm hForm = (HierarchyForm)
Integer id = hForm.getId();
if (id != null)
if (id.intValue() > 0){ <-- exception thrown here
...
}
}
.
.
.
}
编辑: Certo,eunãohaviacomtemplado que o“&amp;&amp;”没有java tinha este comportamento de resolver a primeiraclassoesóresolvera segunda em caso“true”。
Neste caso,claro,estou de concordo com as respostas dos colegas e respectrandoquevocêtenhapostadoocódigoricatamente,meupalpiteéquetenha algo a ver com acesso concorrente ao mesmo objeto hForm,algummétodopodeestar atribuindo“null” para o hForm ou ao id。
Espero ter ajudado desta vez。
好的,我没想过“&amp;&amp;”在java中有这种行为来解决第一个表达式而第二个只解决了“true”。
在这种情况下,当然,我同意同事的回答,并假设您已正确发布代码,我的猜测是否与同一对象的并发访问有关hForm,某些方法可能为hForm或id分配“null”。
这次我帮了忙。