2013-04-29 129 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)