string是引用型別;
string str = null 沒有建立記憶體空間,str中存放的是空引用指標;
string str = "" 建立了記憶體空間,str中存放的是指向堆中的指標。
簡單地說:
string str ="";
給你一張白紙;
string str = null;
連白紙也沒有。
string.empty就相當於""
一般用於字串的初始化
比如:string a;
console.writeline(a);//這裡會報錯,因為沒有初始化a
而下面不會報錯:
string a=string.empty;
console.writeline(a);
或者用於比較:
if(a=="")
if(a==string.empty)
上面兩句是一樣的效果。
string.empty不分配儲存空間
""分配乙個長度為空的儲存空間
所以一般用string.empty
為了以後跨平台,還是用string.empty
在 c# 中,大多數情況下 "" 和 string.empty 可以互換使用。比如:
string s = "";
string s2 = string.empty;
if (s == string.empty)
if語句成立
判定為空字串的幾種寫法,按照效能從高到低的順序是:
s.length == 0 優於 s == string.empty 優於 s == ""
您關於string.empty和null的問題是這樣的,這兩個都是表示空字串,其中有乙個重點是string str1= string.empty和 string str2=null 的區別,這樣定義後,str1是乙個空字串,空字串是乙個特殊的字串,只不過這個字串的值為空,在記憶體中是有準確的指向的,string str2=null,這樣定義後,只是定義了乙個string 類的引用,str2並沒有指向任何地方,在使用前如果不例項化的話,都將報錯。textbox1.text的值為零長度字串 ""。
問題來自於對控制項的text屬性理解錯誤。
一:null和空的區別
1.宣告的string型別的變數和屬性以及欄位在未賦值的情況下均為null,這個null不僅僅表示為無字元,更表示為空的引用。
比如:string username;此時判斷username是否為空應該是if(username==null)而不是if(username==「」),並且使用username.equals(null)或username.equals(「」)均為錯的,因為此時username是個空引用,根本無法呼叫equals()方法。但是如果宣告為string username=「」,則上述方法均成立。但是此時username並不是null而是空值。
2.所有控制項的text屬性的在未賦值的情況下是空值(""), 而不是null。
C 中null和「」的區別
string是引用型別 string str null 沒有建立記憶體空間,str中存放的是空引用指標 string str 建立了記憶體空間,str中存放的是指向堆中的指標。簡單地說 string str 給你一張白紙 string str null 連白紙也沒有。string.empty就相當於...
C 中DBNull和NULL區別
1 dbnull是乙個類。dbnull.value是它唯一的例項。它指資料庫中資料為空 時,在.net中的值。null表示乙個物件的指向無效,即該物件為空物件。對資料庫中的資料進行判斷時,用if sdrct 0 is dbnull 而不是用!代替is。null 是c 中的null,dbnull是資料...
C 中NULL和nullptr的區別
看起來null和nullptr都是代表空指標,但是null在過載函式的時候卻匹配到了引數為int的那個版本。這是因為在c 中,null的定義一般是這樣的 ifdef cplusplus define null 0 else define null void 0 endif cplusplus 可以看...