foreach迴圈報NPE空指標異常
阿新 • • 發佈:2018-11-08
前言
最近debug時忽然發現,如果一個集合賦值為null,那麼對該集合進行foreach迴圈(也叫增強for迴圈)時,會報NPE(即空指標異常NullPointerException)。
程式碼如下:
final List<String> list = null;
// final List<String> list = new ArrayList<>();
for (final String string : list) {
System.out.println(string);
}
執行時報錯如下:
Exception in thread "main" java.lang.NullPointerException at com.lewis.test.TestLewis.main(TestLewis.java:42)
一時間很驚奇,因為在我印象中,foreach迴圈在遇到null的集合時,應該是會自動跳過去不進行遍歷的才對。於是修改程式碼如下:
//final List<String> list = null;
final List<String> list = new ArrayList<>();
for (final String string : list) {
System.out.println(string);
}
執行後發現沒有報錯,看來是以前記錯了。foreach迴圈只會自動跳過遍歷空的集合,如果對於null值的集合,就會直接報NPE。
解決方法
在寫業務邏輯時難免會遇到遍歷集合的情況,這時候應該先判斷集合是否為null再進行遍歷,可以使用Apache的工具類CollectionUtils。
另外補充下,foreach迴圈內部是使用的迭代器來遍歷,也就是說,這種遍歷方式和使用迭代器來遍歷是一樣的。