Sono diversi poiché altri hanno già risposto.
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
Il problema con la gestione di stringhe vuote rispetto a stringhe null sta diventando un problema quando è necessario mantenerlo in un file flat o trasferirlo tramite comunicazioni, quindi trovo che potrebbe essere utile per altri che visitano questa pagina per dare una buona soluzione a quel particolare problema.
Allo scopo di salvare stringhe in un file o comunicazioni:
probabilmente vorrai convertire la stringa in byte.
una buona pratica che consiglio è di aggiungere 2 segmenti di byte di intestazione alla stringa convertita.
segmento 1 - meta info che viene memorizzata in 1 byte e descrive la lunghezza del segmento successivo.
segmento 2 - contiene la lunghezza della stringa da salvare.
esempio:
stringa "abcd" - per semplificare lo convertirò usando un codificatore ASCII e otterrò {65,66,67,68}.
calcolare il segmento 2 produrrà 4 - quindi 4 byte sono la lunghezza della stringa convertita.
calcolare il segmento 1 restituirà 1 - poiché è stato utilizzato solo 1 byte per contenere le informazioni sulla lunghezza delle informazioni sulla stringa convertita (che era 4, cioè se fosse 260 otterrei 2)
La nuova striscia di byte sarà ora {1,4,65,66,67,68} che può essere salvata in un file.
Il vantaggio rispetto all'argomento è che se avessi una stringa vuota da salvare otterrei dalla conversione un array vuoto di byte di lunghezza 0 e dopo aver calcolato i segmenti finirò per avere {1,0} che può essere salvato e successivamente caricato e interpretato di nuovo in una stringa vuota. D'altra parte, se avessi un valore nullo nella mia stringa, finirei per avere solo {0} come array di byte da salvare e di nuovo quando caricato può essere interpretato come nullo.
Ci sono più vantaggi come sapere quale sia la dimensione da caricare o accumulare se si frastagliano più corde.
Tornando all'argomento ... beh, inquinerà lo stack in quanto gli stessi principi descritti vengono utilizzati da qualsiasi sistema per differenziare i valori nulli da quelli vuoti .. quindi sì stringa. Vuoto richiede più memoria di null, anche se non lo farei chiamalo inquinamento .. è solo 1 byte in più.