В чем разница между изменяемой и неизменной строкой в ​​C #? - PullRequest
187 голосов
/ 25 ноября 2010

В чем разница между изменяемой и неизменной строкой в ​​C #?

Ответы [ 14 ]

1 голос
/ 25 ноября 2010

в деталях реализации.

CLR2 System.String является изменяемой. StringBuilder.Append, вызывая String.AppendInplace (приватный метод)

CLR4 System.String является неизменным. StringBuilder имеет массив Char с чанкингом.

0 голосов
/ 04 января 2017

Строка в C # является неизменной. Если вы объединяете его с какой-либо строкой, вы фактически создаете новую строку, то есть новый строковый объект! Но StringBuilder создает изменяемую строку.

0 голосов
/ 20 июня 2013

Вот пример для неизменяемой строки и строителя изменяемой строки

        Console.WriteLine("Mutable String Builder");
        Console.WriteLine("....................................");
        Console.WriteLine();
        StringBuilder sb = new StringBuilder("Very Good Morning");
        Console.WriteLine(sb.ToString());
        sb.Remove(0, 5);
        Console.WriteLine(sb.ToString());

        Console.WriteLine();

        Console.WriteLine("Immutable String");
        Console.WriteLine("....................................");
        Console.WriteLine();
        string s = "Very Good Morning";
        Console.WriteLine(s);
        s.Substring(0, 5);
        Console.WriteLine(s);
        Console.ReadLine();
0 голосов
/ 27 июня 2012

С http://yassershaikh.com/what-is-the-difference-between-strings-and-stringbuilder-in-c-net/

Краткий ответ: String является неизменной - тогда как StringBuilder является изменяемой.

Что это значит? Вики говорит: В объектно-ориентированном виде неизменный объект - это объект, состояние которого нельзя изменить после его создания. Это отличается от изменчивого объекта, который можно изменить после его создания.

Из документации класса StringBuilder:

Объект String является неизменным. Каждый раз, когда вы используете один из методов в классе System.String, вы создаете новый строковый объект в памяти, который требует нового выделения пространства для этого нового объекта.

В ситуациях, когда вам необходимо выполнить повторные модификации строки, накладные расходы, связанные с созданием нового объекта String, могут быть дорогостоящими.

Класс System.Text.StringBuilder может использоваться, когда вы хотите изменить строку без создания нового объекта. Например, использование класса StringBuilder может повысить производительность при объединении множества строк в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...