关于增强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进行判断。
希望大家在开发中能够多多注意细节问题^_^