null、”“、string.Empty 的區別
總結的來說,這三者的區別在於:
null:空值,「未分配記憶」的引用""和string.Empty:空字串,「會分配儲存空間」,表示「長度為零」的字串,而string.Empty是""的更可讀的替代。
它們之間的差異如下:
null
1
string s = null; //空值,未分配記憶空間
- 這表示字串變數 s 被初始化為
null,即它不引用任何對象,不會分配內存空間。 - 這與空字串是不同的,因為空字串是一個具有「零長度的字串」。
null表示引用未指向任何物件。在C#中,字串變數預設是null,除非明確地初始化為其他值或賦予一個字串物件。- 當字串變數為
null時,它「沒有分配任何內存」,因此在嘗試存取其成員時會導致NullReferenceException異常。
string.Empty
1
string s = string.Empty; //空字串,會分配儲存空間
- 這表示字串變數 s 被初始化為「空字串」,即引用了一個具有「零長度的字串」對象。(這與
null是不同的) string.Empty是一個靜態唯讀常數,用來表示一個「空字串」。string.Empty等同於"",都表示一個「長度為零」的字串。- 與
""相比,使用string.Empty可能更具「可讀性」,因為它清晰地表明了意圖,即創建一個空字串。
””
1
string s = ""; //空字串,會分配儲存空間
""這也是將字串變數 s 被初始化為「空字串」""表示一個空字串,即「長度為零」的字串。它實際上是一個字串對象,但其包含的字元數量為零。
將字串變數初始化為空字串。 若要測試字串的值是否為 null 或String.Empty ,請使用IsNullOrEmpty 方法。
string.Empty 和 string = “” 的區別
string.Empty是string類的一個靜態唯讀常數。
string.Empty和string=""區別不大,因為 string.Empty內部實現是:
1
2
3
4
5
6
7
8
9
10
11
public static readonly string Empty;
//這就是String.Empty 唯讀的String類的成員,也是string的變數的默認值是什麼
//String的構造函數
static String(){
Empty = ""; //Empty就是他""
WhitespaceChars = new char[] {
'\t', '\n', '\v', '\f', '\r', ' ', '\x0085', '\x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
' ', ' ', ' ', ' ', '', '\u2028', '\u2029', ' ', ''
};
}
”” 和 String.Empty,為什麼推薦優先使用String.Empty ?
再看一段程式碼:
1
2
3
4
5
6
7
8
string s1 = "";
string s2 = string.Empty;
if (s1 == s2) {
Console.WriteLine("一模一样!");
}
// 结果都是True
Console.WriteLine("".Equals(string.Empty));
Console.WriteLine(object.ReferenceEquals(string.Empty, ""));
既然string.Empty和string=""一樣,同樣需要佔用記憶體空間,
為什麼推薦優先使用string.Empty ?
string.Empty只是讓程式碼好讀,防止程式碼產生歧義,比如說:
string s = ""; string s = " "; 這個不細心看,很難看出是「空字串」還是「空格字元」。
如果判斷一個字串是否是空串,使用if(s==String.Empty)和if(s=="")的效率是一樣的,
但是最有效率的寫法是if(s.Length==0)
string.IsNullOrEmpty的內部實作方式:
1
2
3
4
5
6
public static bool IsNullOrEmpty(string value) {
if (value != null) {
return (value.Length == 0);
}
return true;
}
而string str=null則是表示str未指向任何物件。
將字串變數初始化為空字串。 若要測試字串的值是否為 null 或String.Empty ,請使用IsNullOrEmpty 方法。
MSDN - String.IsNullOrEmpty(String) 方法
C# .NET面试系列一:基础语法
String.Empty、string=”” 和null的区别