Я выполнил этот очень простой тест, используя следующий метод в консольном приложении:
private static void CompareStringConstants()
{
string str1 = "";
string str2 = string.Empty;
string str3 = String.Empty;
Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}
Это ясно указывает на то, что все три переменные, а именно str1
, str2
и str3
, хотя и инициализируются с использованием другого синтаксиса, указывают на один и тот же объект строки (нулевой длины) в памяти. Я выполнил этот тест в консольном приложении .NET 4.5. Внутренне они не имеют никакой разницы, и все сводится к удобству того, которое вы хотите использовать в качестве программиста. Такое поведение строкового класса известно как интернирование строк в .NET. У Эрика Липперта есть очень хороший блог здесь , описывающий эту концепцию.