天天看點

關于list集合判斷時要同時判斷null和size的問題

記錄一下昨天看到項目之前同僚判斷一個list的時候隻判斷了llist!=null,是以而出現了問題

1.list==null,意味着list壓根沒有位址,在堆内就不存在,說明沒有進行初始化。這時list調用任何的方法都會抛出空異常

2.list.size( )= 0,意思是堆内有list,但是還沒有放元素,其長度随着元素數量變化而變化,暫時為零。list.size( )==0說明list已經被new過,但是裡面沒有值。

是以隻判斷list!=null的話,那就是說有這個list集合但是還沒有資料,是以size==0,這樣去擷取list.get(0)的時候就會沒有對象,是以報

index(0),size(0)這個錯誤:

if(voList!=null){
   if(voList.size()>1) {
       for (ManagerVO mvo : voList) {
            auditpeoplelist.append(mvo.getId());
            auditpeoplelist.append(",");
       }               auditProcessItem.setAuditpeoplelist(auditpeoplelist.substring(0,auditpeoplelist.length()-1));
        }else{
         //這裡如果volist.size==0的話就會拿不到對象,會報index(0),size(0)的錯誤
         auditpeoplelist.append(voList.get(0).getId());
         auditProcessItem.setAuditpeoplelist(auditpeoplelist.toString());
        }
    }else{
          auditProcessItem.setAuditpeoplelist(auditProcessVO.getId().toString())
}
           

反推一下,如果隻判斷list.size>0時,list萬一為null呢?你集合都沒有,自然是會報空指針異常:

if(voList.size>0){
   if(voList.size()>1) {
       for (ManagerVO mvo : voList) {
            auditpeoplelist.append(mvo.getId());
            auditpeoplelist.append(",");
       }               auditProcessItem.setAuditpeoplelist(auditpeoplelist.substring(0,auditpeoplelist.length()-1));
        }else{
          //如果voList==null的話,那麼這裡會報空指針異常
          auditpeoplelist.append(voList.get(0).getId());
          auditProcessItem.setAuditpeoplelist(auditpeoplelist.toString());
        }
    }else{
          auditProcessItem.setAuditpeoplelist(auditProcessVO.getId().toString())
}
           

總結就是:

1、如果直接判斷size>0,如果list == null,那程式報空指針的錯

2、如果隻判斷list == null,那list内的資料還是可能為空

是以我們給list做非空判斷時要滿足list!=null&&list.size>0這兩個條件

最後的最後:寫文章不容易啊,親若是喜歡或者對你有幫助記得點贊+關注或者收藏呦~就醬,啾咪~