Sobes.tech
Junior

Как се сравняват низове в C#? Сравняват ли се препратките към низовете или техните стойности?

sobes.tech AI

Отговор от AI

В C# низовете са референтни типове, но по подразбиране тяхното сравнение се извършва по стойност. Операторът за равенство (==) и методът Equals сравняват съдържанието на низовете, а не референциите към обектите в паметта.

За сравнение на низове по референция, което е изключително рядко, може да се използва статичният метод ReferenceEquals.

Ето примери:

// Сравнение по стойност (по подразбиране)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true

// Сравнение по референция
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, различни обекти в паметта

string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, сочи към един и същи обект

Следователно, за повечето сценарии, сравняването на низове в C# се извършва по стойност.