Они разные, поскольку другие уже ответили.
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 действительно занимает больше памяти, чем null, хотя я бы не стал назовите это загрязнением .. это просто еще 1 байт.