⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/goGoing_/article/details/102532715 「冷月寒雪」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

Map是一种无序的基于key-value的数据结构。对于开发人员来说,除了JSON以外,这种存储的方式最熟悉不过了。

经常在研发的过程中,高频用到Map的数据结构。在业务逻辑层处理中,往往会有一些对Map数据类型进行一些判空的处理,自己总结了一下,将判断方法写出供大家参考:

一、Map本身的判空

1.1“==null”不能判断Map的本身是否为null

首先看我的demo

初入java的时候可能会有疑问,map还没有向里面添加任何值,为什么==null不成立?其实很简单,面向对象的基础中曾有说明,当new的时候,将创造了一个新的对象或者说是一个新的实例,没有new之前,是没有它的内部方法的,只有new了以后,这些东西和方法在内存中才会真的存在,及指向了一个具体地址。

如上图,我们在new的时候 调用了HashMap的无参构造方法,从源码层面看,该方法为当前对象开辟了默认的内存大小空间。

因此,得到的结果就是,当new了以后,该对象指向的是一个地址而不是一个null’值,所以在此时用“==null”并不能成立,什么情况下可以利用“==null”?如下图所示:

当它就是个空值得时候就可以利用“==null"来判断,这里的等于null 换在代码里,右边的表达式可以是一个放回了null值的方法。为当前map赋值了null,项目中就可以判断,当map没有new得时候或者是为其复制了null的时候。就可以利用=null来判断。

1.2map.isEmpty()判断为空

当map没有向里面put数据的时候,可以利用map自带得方法来进行判断该Map是否里面有值,如下图得Demo:

由此可见,map.isEmpty()当没有进行put方法操作得时候,.isEmpty()可以判断该Map里面是否有键值对存在。

1.3“==null”与“isEmpty()”最大的区别

如果map是一个null存在,那么在利用isEmpty()来判空将报错空指针异常NullponiterException。如下图

此外,还要注意一种情况:

如果该map里面会有这种情况的话,那么这两种判空方法将不能够实现业务处理。也就诞生了map的另一种判断方法,下面会详解。

2.1 map.containsKey(Object key)判断map中是否存在此键值对

map.containsKey(Object key)方法可以判断出这个map中是否包含了某一个键值对,返回值为Boolean类型,在括号中填写想要查找的key值,若包含则为true,否则为false

2.2 对map中key值对应的value进行判断

2.3对map中key对应的value为空字符串时候的判断。

在这里会涉及到泛型的问题,如若value的值的泛型为String类型的则直接可以利用下面的方法:

可以取出想判断的value的key值.isEmpty()来判断。当然,如果泛型不是String类型的是否则可以利用如下的办法来解决:

.equeals()的方法可以很好的来判断这个map中的key对应的value是否为空。

二、总结

一般来说,对于数据类型的判空应该将空值和空字符串的问题都要判断上,逻辑层处理的时候很重要,如果没有进行严格的空值,对后面的业务处理会造成很麻烦,因为java的运行方式是一行一行的来读取,只要一个if条件进去以后会执行一连串的方法,所以数据判断是很重要的一个前提,直接影响到后续的程序执行。欢迎伙伴们来给我提出宝贵的意见和思路,一起共同进步。

文章目录
  1. 1. 一、Map本身的判空
    1. 1.1. 1.1“==null”不能判断Map的本身是否为null
    2. 1.2. 1.2map.isEmpty()判断为空
    3. 1.3. 1.3“==null”与“isEmpty()”最大的区别
    4. 1.4. 2.1 map.containsKey(Object key)判断map中是否存在此键值对
    5. 1.5. 2.2 对map中key值对应的value进行判断
    6. 1.6. 2.3对map中key对应的value为空字符串时候的判断。
  2. 2. 二、总结