判空的姿势你学废了么

我想大家在开发过程中遇到最多的问题便是NullPointerException即空指针异常了吧,空指针异常一般分为以下几种情况:

  1. object对象为null,为null的情况大多数都是上一步的查询方法没有查到结果,此时通过object来get其中的属性的时候会报异常
  2. 对象集合为空,然后get(0)或者遍历的时候没有获取到对象
  3. 字段值为null,此时又拿次字段去做比较还是什么,也会报异常

现在对常见情况进行详解

  • 对象为空的话我们常用的就是以下方式jdk的util包里的方法
Objects.isNull(obj)
Objects.nonNull(obj)
obj != null
obj == null
复制代码
  • 集合为空的话最常用的就是Spring里带的方法
CollectionUtils.isEmpty(list)
list.size() > 0
复制代码
  • 字段值为null的时候常用的是
Strings.isBlank(str)
StringUtil.isEmpty(str)
StringUtils.isBlank(str)
复制代码

前两种判空我就不做讲解了,下面就是着重讲一下第三种关于一些字段的判空

一般字段为空判断的都是String类型,或者数据库字段设置默认值为null或者空字符串 这个时候我们需要对字符串做处理,例如进行正则匹配什么的,如果是null或者是空字符串的话就会有问题,有一小部分人可能习惯了isEmpty方法,但是这种情况会很容易出现空字符串的问题,这个时候系统就会报异常了。下面我来给大家看一下两个方法的区别:

1.Strings.isBlank(str) --org.apache.logging.log4j.util 包

 我们可以看到方法底层有两种判断方式,前面的就是我们常见的等于null判断,后面的方法我们先看一下trim()方法:  源码具体的作用也是对字符串的前后部分的空格做了处理,删除了字符串最前面和尾部的空格,将中间的字符串包含空格(这个空格不是前面或者后面的空格)返回。 将字符串进行trim()方法处理空格后便进行isEmpty()方法处理了:

2.StringUtilS.isEmpty(str) ---org.apache.commons.lang3 包

​编辑​此时我们看一下apache的lang包下的判空少了个空格的处理,

3.StringUtils.isBlank(str) --org.apache.commons.lang 包(下面这位jy提出)

这里我点开了源码进行查看

这里我们会发现在源码里先判空处理,如果为空则直接返回,不为空的话会对字符串进行遍历,从第一个字符进行判断是否为空字符,知道遍历结束,如果中间出现一个不为空的字符则直接返回结果。

下面我贴出后续源码(由于个人能力有限,无法做出详细解释)

这里我自己去测试了下两个方法的耗时情况,也在大佬的建议下明白了自己的问题,由于自己只是简单测试了一下,结果并不具有代表性,所以就不贴出来了,不过还是推荐JY提供的第三种方法去进行判空操作!

再补充一点:我们很多系统中都会有很多过滤条件,例如单号或者什么的也有很多是string类型的,我们在后台接收参数的时候可以先通过trim()方法将操作人误操作的前后空格给处理掉,然后再将处理后的参数放到筛选条件中进行筛选,这样保证用户的体验性。

提示:现在jdk的util包还有一个方法是Optional()方法,这个方法可以通过链式进行后续的一系列处理,功能挺全且好用,不过对于初级程序员可能阅读起来比较麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值