Home [C# 筆記] 字串中 null、""、string.Empty 的區別
Post
Cancel

[C# 筆記] 字串中 null、""、string.Empty 的區別

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 被初始化為「空字串」
  • ""表示一個空字串,即「長度為零」的字串。它實際上是一個字串對象,但其包含的字元數量為零。

將字串變數初始化為空字串。 若要測試字串的值是否為 nullString.Empty ,請使用IsNullOrEmpty 方法。

string.Empty 和 string = “” 的區別

  • string.Emptystring類的一個靜態唯讀常數。

string.Emptystring=""區別不大,因為 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.Emptystring=""一樣,同樣需要佔用記憶體空間,
為什麼推薦優先使用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未指向任何物件。
將字串變數初始化為空字串。 若要測試字串的值是否為 nullString.Empty ,請使用IsNullOrEmpty 方法。

MSDN - String.IsNullOrEmpty(String) 方法
C# .NET面试系列一:基础语法
String.Empty、string=”” 和null的区别

This post is licensed under CC BY 4.0 by the author.

[C# 筆記] 判斷閏年

[C# 筆記] byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '好'; byte g = 256; 這些變數錯在哪?