Junior
Ako sa porovnávajú reťazce v C#? Porovnávajú sa odkazy na reťazce alebo ich hodnoty?
sobes.tech AI
Odpoveď od AI
V C# sú reťazce referenčné typy, ale ich predvolené porovnanie prebieha podľa hodnoty. Operátor rovnosti (==) a metóda Equals porovnávajú obsah reťazcov, nie odkazy na objekty v pamäti.
Na porovnanie reťazcov podľa odkazu, čo je mimoriadne zriedkavé, možno použiť statickú metódu ReferenceEquals.
Tu sú príklady:
// Porovnanie podľa hodnoty (predvolené)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true
// Porovnanie podľa 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ôzne objekty v pamäti
string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, odkazujú na ten istý objekt
Preto sa vo väčšine scenárov porovnávania reťazcov v C# používa porovnanie podľa hodnoty.