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