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