首页 > 其他分享 >forEach循环报NPE

forEach循环报NPE

时间:2022-12-13 15:25:31浏览次数:41  
标签:遍历 NPE List list 循环 forEach null

首先,foreach循环内部是使用的迭代器来遍历,也就是说,这种遍历方式和使用迭代器来遍历是一样的。

场景一

如果一个集合赋值为null,那么对该集合进行foreach循环(也叫增强for循环)时,会报NPE(即空指针异常NullPointerException)。

代码如下:
List<String> list = null; // List<String> list = new ArrayList<>(); for (String i : list) { System.out.println(i); }

运行时报错如下:
Exception in thread "main" java.lang.NullPointerException

场景二

代码如下:
//List<String> list = null; List<String> list = new ArrayList<>(); for (String s : list) { System.out.println(s); }

运行后,没有报错。

结论

foreach循环会自动跳过遍历空的集合,如果对于null值的集合,会直接报NPE。

解决方法

可先判断集合是否为null再进行遍历,可使用工具类CollectionUtils。
注:是否要处理该npe视情况而定

标签:遍历,NPE,List,list,循环,forEach,null
From: https://www.cnblogs.com/LuckyJane/p/16978906.html

相关文章

  • 以3n 为单位进行循环
     <template       v-for="(item,index)inMath.ceil(warnInfo.length/3)"       :key="index+'ca'"      >   ......
  • 资产运营管理系统,支持房地产业良性循环和健康发展的十条政策措施优化保障性租赁住房筹
    优化保障性租赁房融资渠道。 版权声明:本文章由“厦门多米克信息技术有限公司”编辑组汇编而成,未经授权和许可,任何个人或媒体不得对本网站的文章及其他信息资料予以复制......
  • for 循环返回List,多线程速度慢的解决方案
    /**过于耗时必须休眠否则线程长期占用会发生gc不能及时回收资源,cpu占用率也会可能飙高***/CompletableFuture<Map<String,String>>month=Completabl......
  • ECSHOP Foreach循环中定义变量 根据遍历进行判断(小技巧)
               <divclass="main"style="width:590px;height:442px;">            <!--{assignvar="i"value="1"} ......
  • C语言分支语句和循环语句
    一、分支语句1.if语句//用法if(表达式){语句}()中的表达式为真,执行语句,如果只有1条语句,可以不加{}。 2.if-else语句//用法if(表达式){语句1}else{语句2}()中表达式......
  • 循环结构(一)while
    循环结构(一)while1.语法 while(布尔表达式){   //循环内容 }只要布尔表达式为true,循环就会一直执行大多数情况下,会让循环停止下来,否则一直为true会一直循......
  • 循环结构(二)do while循环
    循环结构(二)dowhile循环1.语法 do{   //代码语句 }while(布尔表达式);对于while语句而言,不满足条件则不执行。而dowhile循环则至少会执行一次while和do......
  • 循环结构(三)For循环
    循环结构(三)For循环1.语法 for(初始化;布尔表达式;更新){   //代码语句 }支持迭代的通用结构,是最有效最灵活的循环结构for循环的执行次数在执行前就确定......
  • 深度学习-循环神经网络(RNN)
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • JS——循环
    For循环for(语句1;语句2;语句3){要执行的代码块}语句1,在循环(代码块)开始之前执行。语句2,定义运行循环(代码块)的条件。语句3,会在循环(代码块)每次被执行后执......