【java语法糖】增强for循环的甜蜜陷阱

本文探讨了Java中增强for循环是否需要判空的问题。通过示例代码对比,阐述了在不同情况下如何正确使用增强for循环,特别是对于null集合的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于增强for循环是否需要判空,以及什么情况下需要判空的问题

代码1.

List<Integer> ints = new ArrayList<>();
for(Integer i : ints){
    System.out.println(i);
}
代码2.
List<Integer> ints = null;
for(Integer i : ints){
    System.out.println(i);
}

通过试验,代码1正常结束程序,只是没有任何输出,因为我们并没有给它内容

代码2却抛出了异常:

                                 Exception in thread "main" java.lang.NullPointerException

                                           at com.lidh.Tets06.main(Tets06.java:14)

原因是,foreach循环本来就是java语法糖,表面上并没有调用该集合的任何方法,实际上却创建了一个迭代器哦。

增强for循环的内部其实就是用Iterator来实现的。就相当于下面这段代码

List<Integer> ints = new ArrayList<Integer>();
Iterator<Integer> intsItra = ints.iterator();
while (intsItra.hasNext()) {
    System.out.println(intsItra.next());
}

我们可以看到,实际上是使用了Iterator,那么需要什么时候对遍历对象判空就很明确了,如果申明的集合为null,使用增强fou循环时需要进行非空判断,因为会创建迭代器;如果申明的集合已经确认有对象,因为Iterator.hasNext()机制,并不需要对该集合的size>0进行判断。

希望大家在开发中能够多多注意细节问题^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值