Sobes.tech
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.