2013-04-29 132 views
0

我想获取参数值,有时候我不发送它们,它会返回我null 及其正常。但是当我返回的字符串数组上瓶坯检查的servlet抛出一个java.lang.NullPointerExceptionservlet request.getParameterValues(fieldName)返回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); 
    } 
} 

回答

6

应该

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

,因为如果你的价值观是null(计算到false),该OR条件在声明中,执行OR的另一部分,其中抛出了NPE

如果你在&&那里,它会SHORT-CIRCUIT当它遇到falsenull!=values声明评估。

+1

+1提及短路。 – Maroun 2013-04-29 07:47:30

+0

为什么,我什么检查或这样或那样的条件 – user63898 2013-04-29 07:47:35

+0

@ user63898如果选中使用OR,那么虽然'values'为空,你还是会做'values.length'这将抛出NPE。如果你有''&&如果'values'为空,第二部分将不会被检查,因为'假&& no_matter_what'永远是假的。 – Maroun 2013-04-29 07:49:15

0

不像如果values为null,它不会去为下一次的检验。

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

还提到&& (AND) and || (OR) in IF statements

1

这是与& &运营商应该被用来测试如果这两个条件都满足,这是你在你的实例所需要的。

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

&&||遵循短路评价。

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

&&运营商如果false在LHS,则它不会执行下一个表达式
因为如果true在LHS,则它不会执行下一个表达式

使你的病情||运营商检查需要&&操作避免NullPointerException

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