Sobes.tech
Junior

Kā notiek virkņu salīdzināšana C#? Vai tiek salīdzinātas virkņu atsauces vai to vērtības?

sobes.tech AI

Atbilde no AI

C# virknes ir irsaugi tipa, bet pēc noklusējuma tās tiek salīdzinātas pēc vērtības. Vienlīdzības operators (==) un metode Equals salīdzina virkņu saturu, nevis atsauces uz objektiem atmiņā.

Lai salīdzinātu virknes pēc atsauces, kas ir ļoti reti, var izmantot statisko metodi ReferenceEquals.

Šeit ir piemēri:

// Salīdzināšana pēc vērtības (noklusējuma)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true

// Salīdzināšana pēc atsauces
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, dažādi objekti atmiņā

string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, atsaucas uz to pašu objektu

Tādēļ lielākajā daļā scenāriju C# virknes tiek salīdzinātas pēc vērtības.