isEmpty和isBlank区别

欢迎访问我的个人博客。
本文主要介绍String为空的几种形式,以及空值判断方式的区别。

1. new String、null和“”区别

根据一段代码来比较String不同状态的“空”:

    public static void main(String[] args) {
        String a = null;
        String b = "";
        String c = new String();
        test(a);
        //test(b);
        //test(c);
    }

    public static void test(String string) {
        if (string == null) {
            System.out.println("string == null");
        }
        if ("".equals(string)) {
            System.out.println("string 为 '' ");
        }
        if (string.isEmpty()) {
            System.out.println("string 为 empty");
        }
    }

执行test(a)的结果是:

string == null
Exception in thread "main" java.lang.NullPointerException

说明String为null时使用isEmpty()方法会报空指针异常!

查看该方法的源码可以发现原因是:

    public boolean isEmpty() {
        return value.length == 0;
    }

value的本质又是什么呢?

private final char value[];

是定义了的一个数组。所以此时的value是不能为null的。

执行test(b)和test©都是一样的结果:

string 为 '' 
string 为 empty

由此我们可以分析:

a. 给String赋值null,本质是没有给它开辟内存空间,它的空指的是不存在。

b. 给String赋值“”,是给它分配了内存空间的,实际上是有值,存储的是“空字符串”。

c. new String的时候,也是分配了内存空间,只不过此时这片空间没有放东西,此时的空指的是“空值”。

所以我们要谨慎使用String.isEmpty()方法, 防止在判断的值为null时会报空指针异常 。

判断字符串是否为空有一个更美妙的方法就是使用StringUtils类。

2. org.apache.commons.lang.StringUtils

StringUtils中isEmpty()和isBlank()区别:

isEmpty()判断某字符串是否为空,为空的标准是 str==null 或 str.length()====0 :

// Empty checks
// Checks if a String is empty ("") or null.

StringUtils.isEmpty(null)      = true
StringUtils.isEmpty("")        = true
StringUtils.isEmpty(" ")       = false
StringUtils.isEmpty("bob")     = false
StringUtils.isEmpty("  bob  ") = false

看源码一目了然:

    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

isBlank()判断某字符串是否为空或长度为0或空白符(whitespace)构成:

//Checks if a String is whitespace, empty ("") or null.

StringUtils.isBlank(null)      = true
StringUtils.isBlank("")        = true
StringUtils.isBlank(" ")       = true
StringUtils.isBlank("bob")     = false
StringUtils.isBlank("  bob  ") = false

看一下源码(对空白符做了判断):

    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }

参考文章:

  1. String.isEmpty() 方法使用的坑点
  2. Java中的isEmpty方法、null以及""的区别
  3. StringUtils里面的isBlank()方法的使用以及StringUtils的其他方法的使用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

周公解码

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值