List對象遍歷時null判斷邏輯梳理


      凡是對集合list,set,map,數組等進行循環一定要判斷是否為null,增強代碼的健壯性。下面以list為例,
使用for循環遍歷list對象,處理其中的元素時,需要對null值判斷:
1、list為null時,拋空指針異常;
2、list不為null,但是list.size()=0時,不執行for循環內代碼塊;
3、list.size()>0,執行for循環,但循環的對象可能為null,也需要判斷。
 
public static void main(String[] args) { printEachList(1); printEachList(2); printEachList(3); printEachList(4); standardPrintStyle(); } //標准寫法
private static void standardPrintStyle() { int key = 2; List<Long> list = getList(2); if (null != list) {//只需要判斷null,size=0時不會執行for循環
        
        for (Long temp : list) { if (null == temp) {//temp可能為null,表示list元素指向的對象為null對象,但是元素的值(null對象的引用)不為空
                System.out.println("遇到對象為null,跳過"); continue; } System.out.println(String.format("key_%d:%s", key, temp.toString())); } } } private static void printEachList(int key) { List<Long> list = getList(key); try { for (Long temp : list) { System.out.println(String.format("key_%d:%s", key, temp.toString())); } } catch (Exception e) { System.out.println("list是否為null --》" + CollectionUtils.isEmpty(list)); System.out.println(String.format("key_%d error:%s", key, e)); } } private static List<Long> getList(int key) { List<Long> list = null; switch (key) { case 1: list = new ArrayList<Long>(); list.add(1L); list.add(2L); break; case 2: list = new ArrayList<Long>(); list.add(null); list.add(1L); break; case 3: list = new ArrayList<Long>(); break; default: break; } return list; }

      執行結果:

key_1:1 key_1:2 list是否為null --》false key_2 error:java.lang.NullPointerException list是否為null --》true key_4 error:java.lang.NullPointerException 遇到對象為null,跳過 key_2:1 

 

下面加深一下對Java List集合為空還是為null的理解。
 
1. 判斷一個list集合是否為空
   在Java中,list集合為空(集合中無元素)與為null是兩碼事。
   舉例,我有一個空着的水杯(cupList),而你沒有,那你是null,我的size為0。你想裝水就需要自己去買個水杯(new ArrayList();),但是我就可以直接裝水(cupList.add(水))。你要是沒有杯子直接倒水,水就流出去啦(空指針異常)。 
2. 什么時候用isEmpty()或list.size() 
   isEmpty() 或者(list.size() == 0)用於判斷list內容是否為空,即集合中是否存在元素,例如,cupList中是否有水。但是,使用isEmpty()和size()的前提是,list是一個空集合,而不是null,所以為了避免異常,建議在使用或賦值list集合之前,做一次空集合創建處理,進行內存空間分配,即:List list = new ArrayList(); 
   isEmpty()判斷有沒有元素,而size()返回有幾個元素,如果判斷一個集合有無元素,建議用isEmpty()方法,看起來清晰明了。 
3. list等於null,可理解為沒有對list集合分配內存空間,實際上壓根就不存在。
 
if(list!=null && !list.isEmpty()){ //在這個里操作list
}else{ //做其他處理
} 

 

 
Reference
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM