Java String 的 isEmpty() 与 null 与 "" 区别解析

问:简单说说 String 的 isEmpty() 与 null 与 "" 的区别?

答:

public class Test {
    public static void main(String[] args) {
        String a = new String();
        String b = "";
        String c = null;

        testString(a);
        testString(b);
        testString(c);
    }

    private static void testString(String str){
        if (str == null){
            System.out.println("null");
        }
        if (str.isEmpty()){
            System.out.println("isEmpty");
        }
        if (str.equals("")){
            System.out.println("\"\"");
        }
        System.out.println("-------------");
    }
}

上面程序段的运行结果如下:

isEmpty
""
-------------
isEmpty
""
-------------
null
Exception in thread "main" java.lang.NullPointerException
Exception in thread "main" java.lang.NullPointerException
-------------

通过程序段运行结果可以看到,a 被分配了内存空间且值为空,是一种有值的绝对空;b 被分配了内存空间且值为空字符串,是一种有值的相对空;c 未分配内存空间且无值,是一种无值状态。

所以判断一个 String 变量是否是空对象,应该让它与 null 进行 == 比较,不能使用 equals()、isEmpty()、"" 等进行判断,因为空对象还未被实例化。

而对于 String 的空值判断可以采用三种方法,equals("") 方法比较对象的内容是否为空值,length() == 0 来判断 String 的字符个数是否空值;isEmpty() 方法来判断 String 对象的字符个数是否为空值(其实现原理等价于 length() == 0 )。

对于空格字符串,虽然在输出显示时候和空值一样,都是空的,但是在运行时空格字符串表示该对象的内存空间里面有内容(是空格,字符个数是空格个数),所以在使用 length() 输出时值为空格个数,使用 isEmpty() 输出为 false,使用 equals("") 判断为 false。

对于 String 的 + 操作符来说,如果有一个操作数是 String,其他操作数会被转换成 String。特别注意,null 与字符串 "XXXX" + 操作会变成 "nullXXXX"。

本文参考自 Java 中 String 的 isEmpty() 与 null 与 "" 区别解析

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,955评论 18 399
  • 这几天健身实在太累了,今天去见老师,昏昏沉沉,老跑神。今天一见周老师突然想不起他姓啥了。这么难得的机会我觉得...
    你觉得啥就啥吧阅读 96评论 0 0
  • 在没有逛论坛前,我是不怎么关注自己的财务状况的,错误地认为这些与我无关,与钱钱有关的一律交给汪先生好了。理由是,他...
    麦子飞呀飞阅读 221评论 0 0
  • 有时候,你任性地去做某一事情,只因后方有坚实的靠山,又或者你已无路可走,必须勇敢前行。而你迈出了这一步之后,不管是...
    AbbyOIO阅读 329评论 0 1
  • 这几天背了GRE的词汇,因为之前先看了杨鹏老师的《17背完GRE》,当时觉得17天不长,如果17天能背完的话,效率...
    心琳之路阅读 2,699评论 0 0

友情链接更多精彩内容