Junior
Come avviene il confronto delle stringhe in C#? Vengono confrontate le referenze alle stringhe o i loro valori?
sobes.tech AI
Risposta dell'AI
In C# le stringhe sono tipi di riferimento, ma il confronto predefinito avviene per valore. L'operatore di uguaglianza (==) e il metodo Equals confrontano il contenuto delle stringhe, non i riferimenti agli oggetti in memoria.
Per confrontare le stringhe per riferimento, cosa molto rara, si può usare il metodo statico ReferenceEquals.
Ecco alcuni esempi:
// Confronto per valore (predefinito)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true
// Confronto per riferimento
string strA = new string(new char[] { 'w', 'o', 'r', 'l', 'd' });
string strB = new string(new char[] { 'w', 'o', 'r', 'l', 'd' });
bool areEqualByReference = object.ReferenceEquals(strA, strB); // false, oggetti diversi in memoria
string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, puntano allo stesso oggetto
Pertanto, nella maggior parte degli scenari, il confronto delle stringhe in C# avviene per valore.