最近在寫一些程序時,總是遇到一些關於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=""是完全一樣的. 希望對初學者有些幫助!