2011-04-27 2 views
3
string s = "value_test_this"; 
string m = s.Replace('e','E'); 

StringBuilder strBuilder = new StringBuilder("value_test_this"); 
strBuilder.Replace('e','E'); 

depuis les chaînes sont immuables, comment les Replace œuvres en classe de chaîne,chaîne classe Remplacer et stringbuilder remplacer

+0

Vérifiez ce poste vous expliquera les choses à vous que vous voulez [Pourquoi utiliser StringBuilder sur chaîne pour obtenir de meilleures performances] (http://pranayamr.blogspot.com/2011/02/why-to-user-stringbuilder-over-string.html) –

Répondre

2

Si vous faites un String.replace il va tout simplement de créer une nouvelle chaîne (puisque, comme vous dit, c'est immuable). Dans StringBuilder, aucune nouvelle chaîne n'est créée, celle que vous avez modifiée.

5

Il crée une autre chaîne dans la mémoire et pointe ensuite le m vers cette nouvelle chaîne. L'ancienne chaîne reste également dans la mémoire.

Et c'est exactement pourquoi StringBuilder devrait être utilisé si des modifications fréquentes doivent être apportées à la chaîne.

Si vous voulez savoir pourquoi Les chaînes sont immuables en C#, regardez this SO discussion

+0

pourquoi s est fait pour pointer une nouvelle chaîne? – Raghav55

+0

Ceci est faux - 's' est définitivement * not * pointé vers la nouvelle chaîne. La méthode 'Replace', avec de nombreuses autres méthodes de chaîne, crée une toute nouvelle chaîne basée sur une certaine logique et renvoie cette nouvelle chaîne. 's' reste inchangé. La variable 'm' est une référence à la nouvelle chaîne. Vous devez remplacer 's' par' m' dans votre réponse. –

+0

@Graham Clark: Vous avez raison. Corrigée. – Aamir