Sobes.tech
Junior

Kaip vyksta eilutės palyginimas C#? Ar lyginamos eilutės nuorodos ar jų reikšmės?

sobes.tech AI

Atsakymas iš AI

C# eilutės yra nuorodų tipai, tačiau jų palyginimas pagal numatytuosius nustatymus vyksta pagal reikšmę. Lygybės operatorius (==) ir Equals metodas lygina eilutės turinį, o ne nuorodas į objektus atmintyje.

Norint palyginti eilutes pagal nuorodą, kas yra labai retas atvejis, galima naudoti statinį metodą ReferenceEquals.

Štai pavyzdžiai:

// Palyginimas pagal reikšmę (numatytasis)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true

// Palyginimas pagal nuorodą
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, skirtingi objektai atmintyje

string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, nurodo į tą patį objektą

Todėl daugeliu atvejų C# eilutės lyginamos pagal reikšmę.