Они разные, как уже отвечали другие.
static void Main(string[] args)
{
string s1 = null;
string s2 = string.Empty;
string s3 = "";
Console.WriteLine(s1 == s2);
Console.WriteLine(s1 == s3);
Console.WriteLine(s2 == s3);
}
results:
false - since null is different from string.empty
false - since null is different from ""
true - since "" is same as string.empty
Проблема управления пустой строкой и нулевыми строками становится проблемой, когда вам нужно либо сохранить ее в виде плоского файла, либо перенести ее через связь, поэтому я считаю, что другим пользователям, которые посещают эту страницу, может быть полезно хорошее решение этой конкретной проблемы.
Для сохранения строк в файл или сообщения:
Возможно, вы захотите преобразовать строку в байты.
Рекомендуется добавлять 2 сегмента байтов заголовка в преобразованную строку.
сегмент 1 - метаинформация, которая хранится в 1 байте и описывает длину следующего сегмента.
сегмент 2 - содержит длину сохраняемой строки.
Пример:
строка "abcd" - для упрощения я конвертирую ее с помощью ASCII-кодера и получу {65,66,67,68}.
2-й сегмент вычисления даст 4, поэтому 4 байта являются длиной преобразованной строки.
вычисление сегмента 1 даст 1 - так как только 1 байт использовался для хранения информации о длине преобразованной строковой информации (то есть 4, то есть если бы это было 260, я бы получил 2)
Новая полоса байтов теперь будет {1,4,65,66,67,68}, которую можно сохранить в файл.
Преимущество по отношению к предмету состоит в том, что если бы у меня была пустая строка для сохранения, я получил бы от преобразования пустой массив байтов длиной 0, и после вычисления сегментов у меня получилось бы {1,0} который может быть сохранен, а затем загружен и интерпретирован обратно в пустую строку.
С другой стороны, если бы у меня было нулевое значение в моей строке, я бы в итоге имел только {0} в качестве моего байтового массива для сохранения, и снова при загрузке можно интерпретировать обратно как ноль.
Есть и другие преимущества, такие как знание размера, который будет загружен или накоплен, если вы зазубрите несколько строк.
Возвращаясь к предмету - это будет ... хорошо загрязняет стек, так как те же самые описанные принципы используются любой системой, чтобы отличать нули от пустых ... так что да. String.Empty требует больше памяти, чем ноль, хотя я не назвал бы это загрязнением .. это просто еще 1 байт.