系统运维系列 之容器为空和为null的区别

系统运维系列 之容器为空和为null的区别,第1张

1 概述
本篇博客接上一篇博客:
系统运维系列 之java.lang.NullPointerException出现原因研究和解决方案分析
继续探讨容器为空和为null的区别。

2 主要内容
(1) 指针异常都是因为调用null对象的方法,就是一个对象还没有没有正常初始化 就先调用它的方法;程序在使用或访问一个对象的引用时,而该对象等于null则被抛出。
(2) Java中新建一个list对象,默认值是空,而非null;而当我们连接数据库查询返回集合,当没有查询到数据时,返回的集合便是null。
(3) 使用一个对象前先判断是否为空,if(xxx!=null)再进行下一步的 *** 作:

equal方法的时候,把不为空的放前面,比如 "xxx".equals(test),字符串"xxx"是不可能为空,错误的写法为:test.equals("xxx"),这个时候test为空的时候,就有可能抛空指针异常。

(4) String类型的对象可以做如下判断:

//trim()的作用:去掉字符串首尾的空格
if(str!=null && !"".equals(str.trim()))

(5) 使用三元运算符:

布尔表达式 ? value1:value2;
String message = (str == null) ? "" : str.substring(0,10);

(6) 使用contains(),containsKey(),containsValue()方法:

//例1:可能会抛出异常
Map <String,Object> map = ... 
String key = ... 
String value = map.get(key); 
System.out.println(value.toString());  //如果值为null,则会抛出异常

//例2:通用做法,做一步检查
Map <String,Object> map = ... 
String key = ... 
if(map.containsKey(key){ 
     String value = map.get(key); 
     System.out.println(value.toString());  //不会抛出异常
}

(7) java中List>关于null的判断:

List<Map<String, Object>> test = fileService.select(test);
Map<String, Object> testMap = subSelect.get(0);
//相当于testMap == null || testMap.isEmpty()
//testMap.isEmpty() 也相当于 testMap.size() == 0
//先判断是否为null再判断是否为空
if(CollectionUtils.isEmpty(testMap)){ 
}

(8) 在进行集合判空时,能用Collection.isEmpty(testList)的就不要用testList.size(),isEmpty不仅可以判断集合是否为null,在时间复杂度上也更优秀:

方法一(数据量大,效率低)if(list!=null && list.size()>0){
}
方法二(数据量大,效率高)if(list!=null && !list.isEmpty()){
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/916474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存