【Java】字符串三种空字符串null、new String()、""的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/o0DarkNessYY0o/article/details/52526411

      今天写个DEMO的时候碰到了个小麻烦,有关于题目所说的字符串这三者的区别,我觉得我真的是够了,居然会用得这么细,不过会了也好,碰到相关的问题就可以一言不合代码就开写!

      既然研究,那就从结果说起,来看测试代码和输出结果:

// 测试代码
package cn.com.dnyy.sn;

public class CheckStringNull {

    public static void main(String[] args) {
        new CheckStringNull().start();
    }

    // 执行方法
    public void start(){

        String blackString = "";// 空字符串
        String isEmptyString = new String();// isEmpty
        String nullString = null;// 空

        System.out.println("blackString:" + blackString);
        System.out.println("isEmptyString:" + isEmptyString);
        System.out.println("nullString:" + nullString);

        System.out.println("------------------------------------");

        System.out.println("blackString.getBytes().length:" + blackString.getBytes().length);
        System.out.println("isEmptyString.getBytes().length:" + isEmptyString.getBytes().length);
        //System.out.println("nullString.getBytes().length:" + nullString.getBytes().length);

        System.out.println("-----------------------------------------------------");

        System.out.println("blackString.isEmpty:" + blackString.isEmpty());
        System.out.println("isEmptyString.isEmpty:" + isEmptyString.isEmpty());
        //System.out.println("nullString.isEmpty:" + nullString.isEmpty());

        System.out.println("-----------------------------------------------------");

        System.out.println("\"\".equals(blackString):"+"".equals(blackString));
        System.out.println("\"\".equals(isEmptyString):"+"".equals(isEmptyString));
        System.out.println("\"\".equals(nullString):"+"".equals(nullString));

        System.out.println("-----------------------------------------------------");

        System.out.println("blackString==null:" + blackString==null);
        System.out.println("isEmptyString==null:" + isEmptyString==null);
        System.out.println("nullString==null:" + nullString==null);

        System.out.println("-----------------------------------------------------");

        System.out.println("blackString.equals(isEmptyString):" + blackString.equals(isEmptyString));
        System.out.println("blackString == isEmptyString:" + blackString == isEmptyString);

    }
}

      输出结果:

blackString:
isEmptyString:
nullString:null
-----------------------------------------------------
blackString.getBytes().length:0
isEmptyString.getBytes().length:0
-----------------------------------------------------
blackString.isEmpty:true
isEmptyString.isEmpty:true
-----------------------------------------------------
"".equals(blackString):true
"".equals(isEmptyString):true
"".equals(nullString):false
-----------------------------------------------------
blackString==null:false
isEmptyString==null:false
nullString==null:false
-----------------------------------------------------
blackString.equals(isEmptyString):true
blackString == isEmptyString:false

      由上面的输出结果可以看得出以下几点

      1、String nullString = null;这种定义方式表示这个变量是没有被分配内存的,源码里面如果运行被注释掉的代码则会报空指针异常java.lang.NullPointerException的错误,由此可以证明内存并没有分配;
      2、String isEmptyString = new String(); 这种定义方式会给isEmptyString变量分配出相应的内存,而由于new String()中的参数为空,则其实质上是一个有分配内存,但是值为空的一个变量;
      3、String blackString = ""; 这种定义方式和前者new String()的定义方式同样的都会分配出内存给这个变量,但与之不同的是,这种定义方式较之前者而言,相当于是new String(“”)定义的,拥有了参数(即调用了不同的构造方法)之后,blackString则是一个既有内存分配又有值(这个值是一个空的字符串)的变量。

      由此大致能够让大家区分了一下这三者之前的区别和联系,希望对大家今后敲代码的过程中有所帮助!谢谢大家!

猜你喜欢

转载自blog.csdn.net/o0DarkNessYY0o/article/details/52526411