foreach循環報NPE空指針異常


前言

最近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循環內部是使用的迭代器來遍歷,也就是說,這種遍歷方式和使用迭代器來遍歷是一樣的。


免責聲明!

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



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