使用for循环遍历list处理list元素时,对null值判断:

1、list为null时空指针异常

2、list不为空,但是list.size()=0时,不执行for循环内代码块

3、list.size()>0,执行for循环,但循环的对象可能为null

 package collection;

 import java.util.ArrayList;
import java.util.List; public class CollectionTest { /**
* @param args
*/
public static void main(String[] args) { printEachList(1);
printEachList(2);
printEachList(3);
printEachList(4); printIterateList(1);
printIterateList(2);
printIterateList(3);
printIterateList(4); /*结论:
list为null时空指针异常
list不为空,但是元素为null时,不执行*/ //标准写法
{
int key = 2;
List<Long> list = getList(4);
if (null!=list) {//只需要判断null,size=0时不会执行for循环
for (Long temp : list) {
if (null == temp) {//temp可能为null,表示list元素指向的对象为null对象,但是元素的值(null对象的引用)不为空
continue;
}
System.out.println(String.format("key_%d:%s", key,temp.toString()));
}
}
} {
Long a = null;
//非静态方法来使用一个值为null的引用类型变量,异常
System.out.println(a.getClass());
//静态方法来使用一个值为null的引用类型变量,正常
System.out.println(Long.getLong("0"));
//静态方法来使用一个值为null的引用类型变量,正常
System.out.println(a.getLong("0"));
} } private static void printEachList(int key){
List<Long> list = getList(key);
try {
for (Long temp : list) {
System.out.println(String.format("key_%d:%s", key,temp.toString()));
}
} catch (Exception e) {
System.out.println(String.format("key_%d error:%s", key,e.getMessage()));
}
} private static void printIterateList(int key){
List<Long> list = getList(key);
try {
if (null == list) {
return;
}
for (int i = 0; i < list.size(); i++) {
if (null==list.get(i)) {
continue;
}
System.out.println(String.format("key_%d:%s", key,list.get(i).toString()));
}
} catch (Exception e) {
System.out.println(String.format("key_%d error:%s", key,e.getMessage()));
}
} private static List<Long> getList(int key){ List<Long> list = null; switch (key) {
case 1:
list = new ArrayList<Long>();
list.add(1L);
list.add(2L);
break;
case 2:
list = new ArrayList<Long>();
list.add(null);
list.add(1L);
break;
case 3:
list = new ArrayList<Long>();
break;
default:
break;
} return list; } }

List对象遍历时null判断的更多相关文章

  1. List对象遍历时null判断逻辑梳理

          凡是对集合list,set,map,数组等进行循环一定要判断是否为null,增强代码的健壮性.下面以list为例, 使用for循环遍历list对象,处理其中的元素时,需要对null值判断: ...

  2. Java判断对象是否为NULL

    Java使用反射判断对象是否为NULL 判断Java对象是否为null可以有两层含义: 第一层:  直接使用 object == null 去判断,对象为null的时候返回true,不为null的时候 ...

  3. Java判断对象是否为Null/空

    package com.taiping.test; import java.lang.reflect.Field; import java.lang.reflect.Type; /** * <p ...

  4. 空对象模式(Null Object Pattern)

    空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract ...

  5. C#检查foreach为null判断

    1.foreach遍历列表或数组时,如果list或数组为null,就会报错,如下图: 2.不知道微软封装foreach的为什么不先检查要遍历的对象是否为null,这样就导致,我们在写代码时,遍历列表时 ...

  6. 设计模式:空对象模式(Null Object Pattern)

    设计模式:空对象模式(Null Object Pattern) 背景 群里聊到<ASP.NET设计模式>,这本书里有一个“Null Object Pattern”,大家就闲聊了一下这个模式 ...

  7. 检查对象是否为NULL或者为Empty

    不管是在Winform开发,还是在asp.net 开发中当从一个数据源中获取数据时你总是不知道这个数据的状态,这个时候总要对她进行一次判断,不过每次进行一次判断总是要写怎么一堆代码,时间长了,总感觉不 ...

  8. 用LinQ扩展方法,泛型扩展方法,实现自定义验证字符是否空、对象是否为null,及泛型约束使用,Action的使用

    一.Linq扩展方法 1.扩展方法必须是静态方法.扩展方法所在的类必须是静态类 2.扩展方法里面的参数必须制定this关键字,紧跟需要扩展的类型,如下: 二.泛型约束 1.使用泛型的原因,是在不知道需 ...

  9. String的非空判断、Integer的非空判断、list的大小判断,对象的非空判断

    1.String的非空判断. StringUtils.isNotEmpty(String str); 2.Integer的非空判断. null != Integer ; 3.list的大小判断. li ...

随机推荐

  1. docker使用的一些需要注意事项

    1.程序需要前台运行 程序必须前台执行,如果是java进程的话  不要有nohup   或者使用service的方式进行后台运行 否则可能会出现频繁启动应用的问题 原因就是docker只能管理运行中的 ...

  2. 怎样获取响应头: Response Header

    1. 使用 xhr.getResponseHeader()可以获取指定响应头字段值. function getHeaderTime() { console.log(this.getResponseHe ...

  3. 安装laravel-ide-helper

    前言 使用laravel作为PHP开发框架的朋友都知道,laravel提供的门面操作都对于PHPStorm的代码提示和方法跳转都不是很友好.然而没有关系,今天介绍一个组件帮助到我们.就是!就是!就是! ...

  4. 移植 Linux 内核

    目录 更新记录 1.Linux 版本及特点 2.打补丁.编译.烧写.启动内核 3.内核源码文件结构 4.内核架构分析 4.1 内核配置 4.2 Makefile架构分析 4.3 Kconfig 架构文 ...

  5. LINUX 使用grep命令查看某个指定时间段的日志

    今天查看订单重复的问题,由于订单生成已经有一段时间了,所以我必须精准进行日志查询.开始用的是sed 命令查询法,后来改成了grep查询,很方便. 命令: grep '时间' '日志文件名 ' 例如:我 ...

  6. Async 配置线程池

    需要注意一下 ThreadPoolTaskExecutor  和 Executor  区别 @Configuration public class ExecutorConfig { /** Set t ...

  7. VSCODE IDE开发工具的快捷键一览

    按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + ...

  8. mysql5.7安装中的问题(服务无法启动。服务没有报告任何错误。排查方法)

    1.拒绝访问的问题 权限不够,必须以管理员身份启动命令行 2.MySQL 服务无法启动.服务没有报告任何错误. 进入到你的mysql安装目录,C:\Program Files\MySQL\MySQL ...

  9. HTML嵌入多媒体对象

    [问题描述]如何在HTML中嵌入pdf.word,音频(如mp3),视频(如mp4),flash呢? [分析] 1 嵌入pdf (1) 利用object <object classid=&quo ...

  10. Mysql判断是否某个字符串在某字符串字段的4种方法

    方法一:like SELECT * FROM 表名 WHERE 字段名 like "%字符%"; 方法二:find_in_set() 利用mysql 字符串函数 find_in_s ...