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

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

代码1.

List ints = new ArrayList<>();
for(Integer i : ints){
    System.out.println(i);
}
代码2.
List 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 ints = new ArrayList();
Iterator intsItra = ints.iterator();
while (intsItra.hasNext()) {
    System.out.println(intsItra.next());
}

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

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

你可能感兴趣的:(java)