Middle
Kuidas toimub stringide võrdlemine C#-s? Kas võrreldakse string-objektide viiteid?
sobes.tech AI
Vastus AI-lt
Sõne võrdlemine C#-s võib toimuda mitmel viisil:
==operaator: Stringi literaalide puhul ja kui stringidel on sama sisu, tagastab==true. Erinevalt teistest viidete tüüpidest on==operaator spetsiaalselt ülekoormatud sisu võrdlemiseks, mitte viidete.Equals()meetod: See meetod võrdleb samuti stringide sisu vaikimisi. Soovitatav on selge sisu võrdlemiseks ning võib olla usaldusväärsem, eritinull-iga võrreldes. On ülekoormusi, mis arvestavad suurust ja kultuuri.String.Compare()meetod: Staatiline meetod, mis võrdleb kahte stringi ja tagastab täisarvu, mis näitab nende vahelist järjekorda. Võimaldab määrata erinevaid võrdlusparameetreid (suurus, kultuur ja teised).String.CompareOrdinal()meetod: Võrdleb stringe baitide kaupa, arvestamata kultuurilisi omadusi.String.CompareTo()meetod: Instantsmeetod, mis võrdleb käesolevat stringi teise stringi või objekti vastu. SarnaneString.Compare()-le, kuid kutsutakse stringi objektil.
Stringi objekti viited ei võrrelda otse == või Equals() meetodiga (ilma kasutaja ülekoormuseta) tavapärases sisus. Kuigi stringid on viidetüübid, on == operaator ja Equals() spetsiaalselt ülekoormatud nende sisu võrdlemiseks.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Sisu võrdlemine
Console.WriteLine(str1 == str2); // true (sisu võrdleb)
Console.WriteLine(str1.Equals(str2)); // true (sisu võrdleb)
Console.WriteLine(str1 == str3); // true (sisu võrdleb)
Console.WriteLine(str1.Equals(str3)); // true (sisu võrdleb)
// Viidete võrdlemine (vajab selget ülekoormust või `ReferenceEquals` kasutamist)
// Antud juhul võivad str1 ja str2 viidata samale objektile,
// stringi interningu tõttu:
Console.WriteLine(object.ReferenceEquals(str1, str2)); // võib olla true või false, sõltuvalt JIT ja CLR-st
Console.WriteLine(object.ReferenceEquals(str1, str3)); // tõenäoliselt false