最近在写一些程序时,总是遇到一些关于null的问题,所以就查了一些资料,终于弄清楚了真相.
null名词解释: (MSDN)null是一个字面文本,它代表空引用,即引用变量没有引用(指向)到任何对象,它是引用类型的默认值.
string s;该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外) 都将引发异常.
string s=null;该语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象.但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法,如toString,getHashCode等.验证程序如下:
public static void RunSnippet()
{
string s;
s=null;
getString(s);
}
protected static void getString(string originalString)
{
System.Console.WriteLine(originalString+"I Love you");
}
该程序将运行正确,在控制台输出结果 I Love you.但如果程序改变一下将不会运行正确,如下:
public static void RunSnippet()
{
string s;
s=null;
getString(s);
}
protected static void getString(string originalString)
{
System.Console.WriteLine(originalString.toString()+"I Love you");
}
这时候程序将引发异常"未将对象引用设置到对象实例",就是因为调用了toString()方法. string s="";该语句表示声明并引用到一个对象,只不过这个对象为0个字节.所以既然有了对象,就可以调用对象的方法,看如下程序:
public static void RunSnippet()
{
string s;
s="";
getString(s);
}
protected static void getString(string originalString)
{
System.Console.WriteLine(originalString.ToString()+"Love you");
}
该程序运行完全正确. string s=string.Empty跟string s=""是完全一样的. 希望对初学者有些帮助!