凡是對集合list,set,map,數組等進行循環必定要判斷是否爲null,加強代碼的健壯性。下面以list爲例,
使用for循環遍歷list對象,處理其中的元素時,須要對null值判斷:
一、list爲null時,拋空指針異常;
二、list不爲null,可是list.size()=0時,不執行for循環內代碼塊;
三、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; }
執行結果:html
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