Вони різні, як вже відповіли інші.
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} як масив байтів для збереження, і знову при завантаженні може бути інтерпретований назад до нуля.
Є більше переваг, таких як знання розміру, який слід завантажити або накопичити, якщо ви закріпите кілька рядків.
Повернемось до теми - це буде .. добре забруднити стек, оскільки ті самі принципи, що описані, використовуються будь-якою системою для диференціації нулів від порожніх .. так що так, рядок. назвіть це забрудненням .. це просто ще 1 байт.