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.