Java中对各种类型判空的最优解

相信写过代码的朋友们都会进行一个非空判断,但是各种非空判断中,那种才是最优雅,最高效的呢?

一、字符串类型

  1. 常用方法

方法1:if(s == null || s == “”){逻辑…}
方法2:if(s == null || s.equals(“”)){逻辑…}
方法3:if(s == null || s.length() == 0){逻辑…}

Tip:如果要用equal方法来判断值,请用object<不可能为空/确定的值>.equal(object<可能为空/可变的值>))

  1. String类方法
 public boolean isEmpty() {
        return value.length == 0;
    }

String类自带的方法。其中的逻辑就是判断字符串的长度来判断字符串是否为空。

  1. 工具类

StringUtils是一个工具栏,使用这个工具类需要导入以下依赖

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>
  • isNotEmpty
public static boolean isEmpty(final CharSequence cs) {
    return cs == null || cs.length() == 0;
}

public static boolean isNotEmpty(final CharSequence cs) {
    return !isEmpty(cs);
}

isNotEmpty的方法就是isEmpty取非,isEmpty就是判断是否为null和字符串的长度来判断字符串是否为空。

  • isBlank
public static boolean isBlank(final CharSequence cs) {
        final int strLen = length(cs);
        if (strLen == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(cs.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    public static int length(final CharSequence cs) {
        return cs == null ? 0 : cs.length();
    }

    public static boolean isNotBlank(final CharSequence cs) {
        return !isBlank(cs);
    }

isNotBlank的方法就是isBlank取非,isBlank就是判断是否为null和字符串的长度来判断字符串是否为空。在此基础上又判断了字符串中的每个字符是不是空格。

二、字符串判断的最优解

先说结论,如果需求中带仅有空格的字符串等同于空字符串,使用StringUtils工具栏的isBlank方法。如果需求中带仅有空格的字符串不等同于空字符串,使用StringUtils工具栏的isEmpty方法。

  1. 网上有言论equal或者==的判断没有长度=0的判断效率高,具体什么原因笔者没有找到肯定的解答。但是从源码中都使用长度来判断这一现象也可以得到一定的印证。pass
  2. StringUtils工具栏的isEmpty和if(s == null || s.length() == 0){逻辑…}的缺点就是在于无法判断空格。但是在实际开发中一个空格的字符串也应该是数据空的。所以最后的抉择应该是看需求了。

三、集合类型

  1. 常用方法

方法1:if(arr == null || arr.size() == 0){逻辑…}

  1. 工具类

CollectionUtils是一个工具栏,使用这个工具类需要导入以下依赖

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>
  • isEmpty
public static boolean isEmpty(final Collection<?> coll) {
    return coll == null || coll.isEmpty();
}

其中isEmpty()是接口Collection的一个方法。根据不同的数据类型,会有不同的实现,我们打开ArrayList类的实现。
在这里插入图片描述
发现其实就是一个长度的测试

public boolean isEmpty() {
    return size == 0;
}

三、集合判断的最优解

先说结论,毫无悬念的就是CollectionUtils工具栏的isEmpty的方法。

四、常用数据类型

Java中常用的数据类型有int、long、short、double、float 、byte、char、boolean。其中每一个都有其对应的初始值,分别是0、0、0、0.0、0.0、0、(空格)、false。所以这八种数据类型不会为空,只会在逻辑意义上没有值,所以需要判断是否赋值的话,就可以直接对初始值进行等值判断。

值得注意的是,这八个基本数据类型在java中都有对应的包装,而包装类是可以为空的,判断方法非常简单。与null进行等值判断即可。

五、类判断

像Date,包装类这种封装类,直接与null进行等值判断即可。如果是自定义的Pojo,在判断对象是否为空的同时,可能还需要判断里面的属性,属性的判断就根据其属性的类型,进行相应的判断。

六、Optional类

Optional类是Java1.8的新特性,主要就是为了判断可能类型是否为空的。

理解、学习与使用 JAVA 中的 OPTIONAL
Optional使用(终于明白版)

原文出处:https://www.cnblogs.com/zllk/p/14006722.html

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cry丶

如果觉得有帮助的打个赏吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值