null是定义数据类型值的关键字,此类关键字共有三个true,false,null.
true,false定义boolean类型值;
null是用作定义引用类型值,标示该引用变量值为空,即该引用为空指针,没有指向任何对象。如Person p=null;
所以,现在明确 了null不是一个对象,也不是一种类型,而是一个关键字,定义引用类型值的关键字。
注意String s; String s= null; String s = "";String s= "zhangsan";Student s = new Student("zhangsan");的区别:
String s;定义了一个引用类型的变量s,但没有对s进行初始化,也不会分配内存空间;(如果是作为类的成员定义时,会默认的赋值为null,就等同于了String s=null).
String s = null; 定义了一个引用类型的变量s,并对s进行初始化,给变量s分配了一个空指针,用到s的时候会在栈内存分配一个变量s的空间,存储值为null,代表空指针;
String s = ""; 定义了一个引用类型的变量s,并对s进行初始化,在常量池中分配一个没有任何内容的空间,并把该空间的引用传递给变量s; 即给变量s分配了一个指针,指向常量池中的一段空内存;(应该是一个字节吧,记不清了)
String s = new String( ""); 定义了一个引用类型的变量s,并对s进行初始化,在栈内存中分配一个空间并将该空间的引用传递给s, 或者说给变量s分配了一个指针,指向栈内存中的一个没有任何内容的空间;
String s= "zhangsan"; 定义了一个引用类型的变量s,并对s进行初始化,指向常量池中的一段内存空间, 即给变量s分配了一个指针,指向常量池中的一段空内存;
Student s = new Student("zhangsan"); 定义了一个引用类型的变量s,并对s进行初始化,在栈内存中分配一个空间创建一个Student类型对象,并将该对象的引用传递给s, 或者说给变量s分配了一个指针,指向栈内存中的对象;
|
|