List对象遍历时null判断
使用for循环遍历list处理list元素时,对null值判断:
1、list为null时空指针异常
2、list不为空,但是list.size()=0时,不执行for循环内代码块
3、list.size()>0,执行for循环,但循环的对象可能为null
1 package collection; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class CollectionTest { 7 8 /** 9 * @param args 10 */ 11 public static void main(String[] args) { 12 13 printEachList(1); 14 printEachList(2); 15 printEachList(3); 16 printEachList(4); 17 18 printIterateList(1); 19 printIterateList(2); 20 printIterateList(3); 21 printIterateList(4); 22 23 /*结论: 24 list为null时空指针异常 25 list不为空,但是元素为null时,不执行*/ 26 27 //标准写法 28 { 29 int key = 2; 30 List<Long> list = getList(4); 31 if (null!=list) {//只需要判断null,size=0时不会执行for循环 32 for (Long temp : list) { 33 if (null == temp) {//temp可能为null,表示list元素指向的对象为null对象,但是元素的值(null对象的引用)不为空 34 continue; 35 } 36 System.out.println(String.format("key_%d:%s", key,temp.toString())); 37 } 38 } 39 } 40 41 { 42 Long a = null; 43 //非静态方法来使用一个值为null的引用类型变量,异常 44 System.out.println(a.getClass()); 45 //静态方法来使用一个值为null的引用类型变量,正常 46 System.out.println(Long.getLong("0")); 47 //静态方法来使用一个值为null的引用类型变量,正常 48 System.out.println(a.getLong("0")); 49 } 50 51 } 52 53 54 private static void printEachList(int key){ 55 List<Long> list = getList(key); 56 try { 57 for (Long temp : list) { 58 System.out.println(String.format("key_%d:%s", key,temp.toString())); 59 } 60 } catch (Exception e) { 61 System.out.println(String.format("key_%d error:%s", key,e.getMessage())); 62 } 63 } 64 65 private static void printIterateList(int key){ 66 List<Long> list = getList(key); 67 try { 68 if (null == list) { 69 return; 70 } 71 for (int i = 0; i < list.size(); i++) { 72 if (null==list.get(i)) { 73 continue; 74 } 75 System.out.println(String.format("key_%d:%s", key,list.get(i).toString())); 76 } 77 } catch (Exception e) { 78 System.out.println(String.format("key_%d error:%s", key,e.getMessage())); 79 } 80 } 81 82 private static List<Long> getList(int key){ 83 84 List<Long> list = null; 85 86 switch (key) { 87 case 1: 88 list = new ArrayList<Long>(); 89 list.add(1L); 90 list.add(2L); 91 break; 92 case 2: 93 list = new ArrayList<Long>(); 94 list.add(null); 95 list.add(1L); 96 break; 97 case 3: 98 list = new ArrayList<Long>(); 99 break; 100 default: 101 break; 102 } 103 104 return list; 105 106 } 107 108 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!