In C#, le stringhe sono internate. Cioè, se creo la stringa foobar
e la uso una seconda volta, C# avrà solo un'istanza della stringa in memoria e sebbene avrò due riferimenti, entrambi punteranno alla stessa istanza di stringa. Questo è uno dei motivi per cui le stringhe sono e devono essere immutabili in C#.Due stringhe identiche possono essere due istanze separate in C#?
Ora, la mia domanda è, se sia possibile creare in qualche modo due stringhe identiche in modo che non vengano internate, ma che ci ritroviamo con due diverse istanze di stringa in memoria, con due indirizzi diversi, che contengono proprio stesso testo?
Se sì, come?
E, questo è qualcosa che può accadere accidentalmente, o è necessario costruire uno scenario esplicitamente per questo caso?
E, infine: Supposto che ci siano due istanze di stringa separate in memoria con lo stesso valore, sono uguali (in termini di ==
)? In tal caso, come funziona ==
? Prima confronta per riferimento, poi per valore o ...?
"In C#, sono internati stringhe. " No non lo sono. String * costanti * sono internati. Le istanze di stringa sono internate solo se si chiama 'String.Intern'. Internare ogni stringa intermedia sarebbe molto dispendioso. –
Ok, non lo sapevo. Cosa significa per due istanze di stringa che hanno lo stesso valore? Si riferiscono allo stesso "oggetto"? –
@GoloRoden '==' sulle stringhe fa un confronto tra stringhe (lettera per lettera, se lo fosse) in C#. Non importa se sono internati o meno, e non importa a quale memoria si riferiscono. –