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