使用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. nginx 实践配置

    nginx.conf文件 user root; worker_processes 1; error_log logs/error.log crit; #error_log logs/error.log ...

  2. TCP协议探究(四):定时器

    1 概述 重传定时器:使用于当希望收到另一端的确认. 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口 保活(keepalive)定时器:用于检测一个空闲连接的另一 ...

  3. HTTP中GET,POST和PUT的区别

    一.HTTP中定义了以下几种请求方法: 1.GET:2.POST:3.PUT:4.DELETE;5.HEAD:6.TRACE:7.OPTIONS: 二.各个方法介绍: 1.GET方法:对这个资源的查操 ...

  4. 如何使用jMeter发送两个逻辑上相关的HTTP请求

    在前一篇文章使用jMeter构造大量并发的随机HTTP请求里我通过jMeter构造了大量的HTTP GET并发请求,对服务器产生了大量读操作. 现在我有另一个需求场景:假设我开发了一个创建Servic ...

  5. 【1】Git基础

    一.Git概念 1.1.Git定义   Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发 ...

  6. GoTests工具自动化test使用

    安装 $go get -u github.com/cweill/gotests/... 复制代码 具体使用示例 用法 $gotests [options] PATH ... 复制代码 options说 ...

  7. 【LOJ6671】EntropyIncreaser 与 Minecraft

    Orz lbt Description https://loj.ac/problem/6671 Solution

  8. Airtest 支持的手机,系统等环境

    据个人经验,Airtest 支持的以下设备会跑的比较666 Android 平台 华为荣耀9青春版 版本:8.0.0 型号:LLD-AL10 评价:自动化运行最6 华为 荣耀10青春版 版本:9.0. ...

  9. [JLOI2009]神秘的生物——轮廓线DP

    原题链接 题目大意 \(n\times n\)的带权方阵,选一个权值最大的连通块 Solution 一眼连通性DP,然后就没了 转移很好想的啦,简单讨论一下就行了 有一个坑点,就是不能一个格子都不选, ...

  10. numba初体验

    numba初体验 今天在知乎上发现了一个很神奇的包numba,可以用jit的方式大幅提高计算型python代码的效率,一起来看一下 安装 numba的安装方式很简单,使用pip或者anacoda都可以 ...