我想获取参数值,有时我不发送它们并返回给我null
好吧但是当我预先检查返回字符串数组时,servlet会抛出java.lang.NullPointerException
我只是在null时无所事事。 (继续流程)
String[] values = null;
if(request.getParameterValues(fieldName).length>0)
{
values = request.getParameterValues(fieldName);
if(null!=values || values.length>0) // HERE IT throws NullPointerException
{
Collections.addAll(strlist, values);
}
}
答案 0 :(得分:6)
应该是
if(null!=values && values.length>0)
因为,如果您的值为null
(评估为false
),则语句中的OR
条件会执行OR
的其他部分,这会抛出NPE
。
如果您在&&
处提供false
,则会在null!=values
遇到{{1}}时进行SHORT-CIRCUIT语句评估。
答案 1 :(得分:1)
这是AND&&应该用于测试是否满足两个条件的运算符,这是您在实例中所需要的。
if (null != values && values.length > 0)
答案 2 :(得分:0)
与或不同,如果values
为空,则不会进行下一次检查。
if(null!=values && values.length>0) // change to and
{
Collections.addAll(strlist, values);
}
答案 3 :(得分:0)
&&
和||
遵循短路评估。
即使不需要,这些操作符也不会执行右侧表达式。
对于&&
运算符,如果在LHS处false
,则它不会执行下一个表达式
对于||
运算符,如果在LHS true
,则它不会执行下一个表达式
因此,对于您的状况检查,需要&&
操作以避免NullPointerException
if(null!=values && values.length>0)