foreach循环报NullPointerException空指针异常
一、问题
最近写了个接口,一直报Exception in thread "main" java.lang.NullPointerException,定位到报错的语句,发现是一个foreach语句报错:
于是打个断点查看,发现 userInfoBaseBOList = null,
难怪一直报空指针。
二、说明
- 对于空的集合,foreach循环会自动跳过对该空集合的遍历,但是不会报NPE;
- 对于null值的集合,foreach循环则会直接报NPE。
而
不会报NPE
三、关于List集合为空和null的理解
- list为空,实际上已经实例化对象开辟内存空间了,但是还没有保存数据;
- list等于null,可理解为没有对list集合分配内存空间,实际上压根就不存在。
四、启示
用foreach遍历集合时,应该先使用Apache的工具类CollectionUtils判断集合是否为null,再进行遍历。
CollectionUtils的isEmpty()方法及isNotEmpty()方法源码如下:
if(list != null && !list.isEmpty()){ }