0

我想获取参数值,有时我不发送它们,它返回给我null 并且没问题。但是当我对返回字符串数组进行检查时,servlet 会抛出一个java.lang.NullPointerException

我只是在它为空时什么都不做。(继续流程)

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);
    }
}
4

4 回答 4

6

它应该是

if(null!=values && values.length>0)

因为,如果您的值是null(评估为false),则OR语句中的条件将执行 的另一部分OR,从而引发NPE.

如果你在&&那里给出,它会在遇到at时短路语句评估。falsenull!=values

于 2013-04-29T07:45:06.307 回答
1

应该使用 AND && 运算符来测试是否满足两个条件,这是您在实例中所需要的。

if (null != values && values.length > 0)
于 2013-04-29T07:48:22.973 回答
0

不同如果values为空,它不会进行下一次检查。

if(null!=values && values.length>0) // change to and 
 {
         Collections.addAll(strlist, values);
 }

另请参阅&& (AND) 和 || (OR) 在 IF 语句中

于 2013-04-29T07:45:11.227 回答
0

&&||遵循短路评估。

也就是说,如果不需要,这些运算符不会执行右侧表达式。

for &&operator 如果false在 LHS,则不会执行下一个表达式
for ||operator iftrue在 LHS,则不会执行下一个表达式

所以为了你的情况检查它需要&&操作以避免NullPointerException

if(null!=values && values.length>0)
于 2013-04-29T07:54:51.497 回答