Sobes.tech
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# γίνεται με βάση την τιμή.