Başkalarının zaten cevapladığı gibi farklılar.
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
Boş dizge ile boş dizelerin yönetilmesiyle ilgili sorun, onu düz bir dosyada saklamanız veya iletişim yoluyla aktarmanız gerektiğinde bir sorun haline geliyor. bu özel sorun.
Dizeleri bir dosyaya veya iletişime kaydetmek amacıyla:
muhtemelen dizeyi bayta dönüştürmek isteyeceksiniz.
tavsiye ettiğim iyi bir uygulama, dönüştürülmüş dizenize 2 segment başlık baytı eklemektir.
segment 1 - 1 baytta saklanan ve bir sonraki segmentin uzunluğunu tanımlayan meta bilgi.
segment 2 - kaydedilecek dizenin uzunluğunu tutar.
örnek:
string "abcd" - basitleştirmek için ASCII kodlayıcı kullanarak dönüştüreceğim ve {65,66,67,68} elde edeceğim.
hesaplama segmenti 2, 4 değerini verir - yani 4 bayt dönüştürülen dizenin uzunluğudur.
1. segmenti hesapla, 1'i verir - dönüştürülen dize bilgisinin uzunluk bilgisini tutmak için sadece 1 bayt kullanıldığından (4'tü, yani 260 olsaydı 2 alırdım)
Yeni bayt şeridi artık bir dosyaya kaydedilebilecek {1,4,65,66,67,68} olacaktır.
Konuyla ilgili avantajı, kurtaracak boş bir dizem olsaydı, dönüşümden 0 uzunluğunda boş bir bayt dizisi elde edecektim ve segmentleri hesapladıktan sonra {1,0} elde edeceğim. kaydedilir ve daha sonra yüklenir ve boş bir dizeye geri yorumlanır. Öte yandan, dizemde boş değer olsaydı, kaydetmek için bayt dizim olarak yalnızca {0} olur ve yüklendiği zaman tekrar boş olarak yorumlanabilir.
Birden çok dizgiyi zıplarsanız hangi boyutun yükleneceğini veya biriktirileceğini bilmek gibi daha fazla fayda vardır.
Konuya geri dönersek - bu, bir null nullları boştan ayırmak için herhangi bir sistem tarafından kullanılan aynı prensipler gibi yığını kirletecektir. kirlilik deyin .. sadece 1 bayt daha.