Sobes.tech
Junior

Jak se v C# provádí porovnání řetězců? Porovnávají se odkazy na řetězce nebo jejich hodnoty?

sobes.tech AI

Odpověď od AI

V C# jsou řetězce referenční typy, ale jejich výchozí porovnání probíhá podle hodnoty. Operátor rovnosti (==) a metoda Equals porovnávají obsah řetězců, nikoli odkazy na objekty v paměti.

Pro porovnání řetězců podle odkazu, což je velmi vzácné, lze použít statickou metodu ReferenceEquals.

Zde jsou příklady:

// Porovnání podle hodnoty (výchozí)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true

// Porovnání podle odkazu
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, různé objekty v paměti

string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, odkazují na stejný objekt

Proto se ve většině scénářů v C# porovnávají řetězce podle hodnoty.