在这要先说明下 String str;和String str=null;的关系,代码上来说两者几乎不差什么,但是这里String str=null;多了个指向空的引用
而String str ;却只是定义,String str=null比String str多了初始化的内容。
但是String str=null指向的是空引用,在内存里并没有开辟空间,没有实际的内存。
如果通过str调用String的方法,就会报空指针异常。
而通过""这种方式创建字符串,会保存到String类的字符串池,在内存中是分配了空间的。
也就是说String str=null并没有实例化,而String = ""实例化了,""可以看作是对象。
我们通过小程序来验证下:
String str1 = "";
String str2 = null; System.out.println(str1.length()); System.out.println(str2.length());可以看到输出结果是:
0
Exception in thread "main" java.lang.NullPointerException at com.mytest.StringTrap.main(StringTrap.java:15)总结来说,String str=null虽然已初始化,但是并未实例化,而String = ""是已经实例化了的,前者在内存中并不存在,而后者是实际存在的。