Dal entrambi sono tipi di riferimento, perché hanno risultati diversi?
Perché gli oggetti string
sono altamente ottimizzati. In particolare, poiché sono immutabili, possono essere internati dal compilatore per impedire la duplicazione.
Se si dispone di due diversi oggetti string
che rappresentano entrambi la stessa stringa di caratteri (come nell'esempio), il compilatore lo riconoscerà e manterrà solo un'istanza dell'oggetto stringa effettivo.
Il risultato è che entrambi gli oggetti s1
e s2
sono effettivamente lo stesso oggetto per quanto riguarda il compilatore e persino fanno riferimento alla stessa posizione nella memoria.
Questa contabilità avviene dietro le quinte in una cosa chiamata "tavolo degli stagisti", ma non è davvero qualcosa di cui ti devi preoccupare. L'importante è che tutti i valori letterali stringa siano internati per impostazione predefinita dal compilatore.
Lo stesso tipo di cosa non corrisponde a per gli oggetti StringBuilder
, perché non sono immutabili. Sono progettati per consentire di modificare un oggetto stringa e, in quanto tali, le ottimizzazioni non hanno molto senso. Ecco perché gli oggetti sb1
e sb2
vengono effettivamente visti come due oggetti diversi.
La regola generale è piuttosto semplice: utilizzare string
per impostazione predefinita o quando si desidera una singola stringa di caratteri immutabile. Utilizzare solo StringBuilder
quando si desidera modificare la stessa stringa più volte, ad esempio in un ciclo o in un'altra sezione di codice relativamente breve.
lettura Rilevante: Optimizing C# String Performance
fonte
2012-05-19 02:40:32
si sta confrontando due diversi riferimenti 'StringBuilder' oggetti. Sono due oggetti separati. – birryree
+1, non solo per una domanda eccellente, ma per chiederlo in modo così chiaro, con un campione completo di codice commentato perfettamente. –
Questa domanda in realtà non ha nulla a che fare con 'StringBuilder'. Si tratta in realtà di "perché due variabili stringa inizializzate con due stringhe letterali che contengono la stessa sequenza di caratteri sono paragonabili ad essere lo stesso oggetto"? –