Java中String s1 ; String s2=null ; String s3=”” ; String s4=new String(“”) ; 的区别。
======================================================================
当声明为String s1时
声明一个字符串对象,分配了一个内存空间,没有进行初始化,没有存入任何对象。
成员变量:
JAVA为安全原因不允许一个悬挂引用,没有赋值的引用地址一律自动赋值为NULL,以防止访问到任意内存。
局部变量:
局部变量是不会自动初始化的,必须显示地赋初始值。如果没有赋初始值,在用System.out.println(s1);时会报错。
----------------------------------------------------------------------------------------------------------------------
当声明为String s2 = null时
声明一个字符串对象,分配了一个内存空间,进行初始化,存入了一个空对象,值为空。
NULL代表声明了一个空对象,根本就不是一个字符串。除了=和==,对空对象做任何操作都不行的,运行时会报异常。
----------------------------------------------------------------------------------------------------------------------
当声明为String s3 = “” 时
声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象,值为””。
是在字符串常量池(栈中)存入了一个字符串常量,并用引用指向他。
当声明为String s3 = new String(“” ) 时
声明一个字符串对象,分配了一个内存空间,初始化,存了一个字符串对象
是在堆中创建一个字符串对象,并把引用放在栈中指向他的首地址。