List对象遍历时null判断逻辑梳理

      凡是对集合list,set,map,数组等进行循环一定要判断是否为null,增强代码的健壮性。下面以list为例,
使用for循环遍历list对象,处理其中的元素时,需要对null值判断:
1、list为null时,抛空指针异常;
2、list不为null,但是list.size()=0时,不执行for循环内代码块;
3、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;
}
复制代码

      执行结果:

复制代码
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
 
posted @   楼兰胡杨  阅读(4778)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示