首先,foreach循环内部是使用的迭代器来遍历,也就是说,这种遍历方式和使用迭代器来遍历是一样的。
场景一
如果一个集合赋值为null,那么对该集合进行foreach循环(也叫增强for循环)时,会报NPE(即空指针异常NullPointerException)。
代码如下:
List<String> list = null; // List<String> list = new ArrayList<>(); for (String i : list) { System.out.println(i); }
运行时报错如下:
Exception in thread "main" java.lang.NullPointerException
场景二
代码如下:
//List<String> list = null; List<String> list = new ArrayList<>(); for (String s : list) { System.out.println(s); }
运行后,没有报错。
结论
foreach循环会自动跳过遍历空的集合,如果对于null值的集合,会直接报NPE。
解决方法
可先判断集合是否为null再进行遍历,可使用工具类CollectionUtils。
注:是否要处理该npe视情况而定