Middle
Come avviene il confronto delle stringhe in C#? Vengono confrontate le referenze degli oggetti stringa?
sobes.tech AI
Risposta dell'AI
Il confronto delle stringhe in C# può avvenire in diversi modi:
- Operatore
==: Per le stringhe letterali e se le stringhe hanno lo stesso contenuto, l'operatore==restituiràtrue. A differenza di altri tipi di riferimento, per le stringhe l'operatore==è sovraccaricato per confrontare il contenuto, non i riferimenti. - Metodo
Equals(): Questo metodo confronta anche il contenuto delle stringhe per impostazione predefinita. È raccomandato per un confronto esplicito del contenuto e può essere più affidabile, specialmente quando si confrontano connull. Sono disponibili sovraccarichi per considerare la sensibilità alle maiuscole/minuscole e alla cultura. - Metodo
String.Compare(): Metodo statico che confronta due stringhe e restituisce un valore intero che indica la relazione di ordine tra esse. Permette di specificare diversi parametri di confronto (sensibilità alle maiuscole/minuscole, cultura, ecc.). - Metodo
String.CompareOrdinal(): Confronta le stringhe byte per byte, senza considerare le caratteristiche culturali. - Metodo
String.CompareTo(): Metodo di istanza che confronta la stringa corrente con un'altra stringa o oggetto. È simile aString.Compare(), ma viene chiamato su un oggetto stringa.
I riferimenti agli oggetti stringa non vengono confrontati direttamente con l'operatore == o con il metodo Equals() (senza sovraccarico personalizzato) in un confronto di contenuto normale. Sebbene le stringhe siano tipi di riferimento, per comodità l'operatore == e il metodo Equals() sono appositamente sovraccaricati per confrontare esattamente il contenuto.
string str1 = "hello";
string str2 = "hello";
string str3 = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
// Confronto del contenuto
Console.WriteLine(str1 == str2); // true (confronta il contenuto)
Console.WriteLine(str1.Equals(str2)); // true (confronta il contenuto)
Console.WriteLine(str1 == str3); // true (confronta il contenuto)
Console.WriteLine(str1.Equals(str3)); // true (confronta il contenuto)
// Confronto delle referenze (richiede conversione esplicita o uso di ReferenceEquals)
// In questo caso, str1 e str2 possono riferirsi allo stesso oggetto
// grazie all'interning delle stringhe. str3, probabilmente, sarà un oggetto separato.
Console.WriteLine(object.ReferenceEquals(str1, str2)); // può essere true o false a seconda di JIT e CLR
Console.WriteLine(object.ReferenceEquals(str1, str3)); // probabilmente false