重學c#系列——string.empty 和 "" 還有null[二十]

敖毛毛發表於2021-12-24

前言

簡單整理一下string.empty 和 "" 還有 null的區別。

正文

首先null 和 string.empty 還有 "" 是不一樣的。

null 關鍵字是表示不引用任何物件的空引用的文字值。 null 是引用型別變數的預設值。

我們編輯高階語言的時候就可以表示的含義就是不引用任何物件的空引用。

但也不能完全這樣說,應該說在語法含義上是這樣的,具體的肯定指向某個引用。

string.empty 和 "" 實際上是一樣的。

// The Empty constant holds the empty string value. It is initialized by the EE during startup.
// It is treated as intrinsic by the JIT as so the static constructor would never run.
// Leaving it uninitialized would confuse debuggers.
//
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access 
//from native.
public static readonly String Empty;

也可以進行測試:

static void Main(string[] args)
{
	string a = string.Empty;
	string b = string.Empty;
	string c = "";
	Console.WriteLine(object.ReferenceEquals(a, b));
	Console.WriteLine(object.ReferenceEquals(a,c));
	Console.ReadKey();
}

這樣可以看出其實是一樣的,這其實是一個string 常量池的作用了。

下一節介紹DateTime和DateTimeOffset的區別。

相關文章