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 }
时间: 2024-11-01 23:57:44

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

空对象模式(Null Object Pattern)

空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系.(消除如if(Object == null) 这样的检查null实例代码) 例子: public abstract class Duck { public String name; public abstract void getName(); } public class ConcreteDuck extends Duck { public ConcreteDuck(String name) { this.na

被遗忘的设计模式——空对象模式(Null Object Pattern)

GoF(四人帮)那本<设计模式 可复用面向对象软件的基础>可谓是设计模式方面的经典之作,其中介绍的23种设计模式, 也可谓是经典中的经典.但是,设计模式的种类绝不仅仅是这23种,除此之外还有很多巧妙可爱的设计模式值得我们学习.这些 被遗忘的设计模式,也可以堪称经典之作.今天我们来一起学习被遗忘的设计模式--空对象模式(Null Object Pattern). 一起看看这个模式会带给我们怎样的惊喜? 一.Pattern name Provide an object as a surrogate

C#检查foreach为null判断

1.foreach遍历列表或数组时,如果list或数组为null,就会报错,如下图: 2.不知道微软封装foreach的为什么不先检查要遍历的对象是否为null,这样就导致,我们在写代码时,遍历列表时就要先判断列表是否为null,如下图: 3.为了简化这一判断是否null的过程,我写了一个扩展方法,因为列表和数组都继承IEnumerable接口,所以该扩展方法就扩展在IEnumerable类型上,为了通用,将这个方法写成了个泛型方法,如下图: 4.这样在遍历列表的地方就不要先判断列表或数组是否为

Freemarker中的null判断,小坑一枚

上次写到,在Freemarker中日期转换,可以提取成工具方法.主要是Freemarker对null的处理方式,非常坑爹.只要一个对象或对象的属性为null,就报错,虽然不影响界面显示,但控制台和日志总是打印"错误信息",很是不爽.所以,想写方法判断对象是否为null,再做正确的显示. 上次写的2个Freemarker函数,实际过程中只用到了第1个,正常.把int类型的日期转换成字符串    <#function number_to_ymdhms date> <#if

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

不管是在Winform开发,还是在asp.net 开发中当从一个数据源中获取数据时你总是不知道这个数据的状态,这个时候总要对她进行一次判断,不过每次进行一次判断总是要写怎么一堆代码,时间长了,总感觉不太好,于是就有了下面代码的封装,这是一个扩展的泛型方法,写在了System.命名空间下面,省去了重复写这么多代码的时间,每次只要原点调用以下就可以了. 呵呵, 1 namespace System 2 { 3 public static class CheckValueExten 4 { 5 ///

字符串和对象做非空判断

在对字符串或者对象做非空判断时,需要将判断是否为null写在长度是否为0之前: 1 //错误写法,用这种写法,如果map为null时,那么在运行map.size()时就会报错 2 if(map.size()==0||map==null||map.get("ASSOCONTRACTID")==null) { 3 ... 4 } 5 //正确写法 6 if(map==null||map.size()==0||map.get("ASSOCONTRACTID")==null

类和对象 nil/Nil/NULL的区别

iOS-----类和对象,nil/Nil/NULL的区别 iOS中类和对象,nil/Nil/NULL的区别 类与对象的概念 类是对同一类事物高度的抽象,类中定义了这一类对象所应具有的静态属性(属性)和动态属性(方法). 对象是类的一个实例,是一个具体的事物. 类与对象是抽象与具体的关系. 类其实就是一种数据类型,它的变量就是对象. 类与类之间的关系——继承关系 A是B 如果这句话说的通,在设计程序的时候就可以看成是继承关系. 例如:学生与小学生 小学生也是学生,所以学生是小学生的父类,小学生是学

C#空值和null判断

一.空值判断效率 string s = ""; if(s == ""){} if(s == string.Empty){} if (string.IsNullOrEmpty(s)) {} if(s != null && s.Length ==0) {} if((s+"").Length == 0){} 1,2最慢:3较快:4,5最快 1,2几乎没区别:4,5几乎没区别 二.空值和null判断 if (string.IsNullOr

在Java代码中避免 &quot;!=null &quot; 判断

这对于我来说是一个很合理常见的问题,由初级过度到中级程序员的时候经常会遇到.他们不知道也不信任正在用的约定,并且小心的检查着null.还有当他们写代码的时候,总是会依赖于通过返回空(NULL)来表明某些意义,因此需要调用者去检查Null. 换种方式来说,有两种情景空指针的检查会出现: 就约定来说是一个合理的响应 不是合理的响应 第二种很简单,可以通过用assert或者直接允许失败,例如NullPointerException.Assertions是一个从Java1.4加进来的高度未被利用的特性,