Junior
Cum se compară șirurile în C#? Se compară referințele la șiruri sau valorile lor?
sobes.tech AI
Răspuns de la AI
În C#, șirurile de caractere sunt tipuri de referință, dar comparația lor implicită se face după valoare. Operatorul de egalitate (==) și metoda Equals compară conținutul șirurilor, nu referințele către obiecte în memorie.
Pentru compararea șirurilor după referință, ceea ce este extrem de rar, se poate folosi metoda statică ReferenceEquals.
Iată exemple:
// Comparare după valoare (implicit)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true
// Comparare după referință
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, obiecte diferite în memorie
string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, referințe la același obiect
Prin urmare, pentru majoritatea scenariilor, compararea șirurilor în C# se face după valoare.