C#中string.Empty和""、null的区别
string.Empty是string类的一个静态常量,而""则表示一个空字符串。
string是一种特殊的引用类型,它的null值则表示没有分配内存。
使用ILSpy反编译String类,可以看到string.Equalus方法重写了Object的Equalus()方法:先比较引用,再比较字符串的内容,地址相同,值必相同。
1 // 重写Object方法 2 [__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] 3 public override bool Equals(object obj) 4 { 5 if (this == null) 6 { 7 throw new NullReferenceException(); 8 } 9 string text = obj as string; 10 return text != null && (this == obj || (this.Length == text.Length && string.EqualsHelper(this, text))); 11 } 12 // 重载Equals 13 [__DynamicallyInvokable, ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] 14 public bool Equals(string value) 15 { 16 if (this == null) 17 { 18 throw new NullReferenceException(); 19 } 20 return value != null && (this == value || (this.Length == value.Length && string.EqualsHelper(this, value))); 21 }
string.Empty和空字符串比较结果:
1 static void Main(string[] args) 2 { 3 String emptyString = ""; 4 5 // True 6 Console.WriteLine(emptyString == String.Empty); 7 8 // True 9 Console.WriteLine(emptyString.Equals(string.Empty)); 10 }