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# се извършва по стойност.