Вопрос по stringbuilder – Строители строк называются неизменными? Что это значит в C # .NET?

0

Мне недавно задали этот вопрос:What is the difference between String and StringBuilders ?

Я знал, что где-то читал, что StringBuildersimmutable, но что было неизменным и как операции над StringBuilder оказываются быстрее, чем String, о котором я не знал.

Пожалуйста, кто-нибудь может помочь мне понять это?

возможный дубликатstring is immutable and stringbuilder is mutable nawfal
О нет, StringBuilders не являются неизменяемыми .... Строки есть. Неизменный означает, что внутреннее состояние объекта не может быть изменено. Вы не можете изменить определенный символ внутри строки (или добавить или удалить символы). Но вы постоянно меняете состояние строителей строк (например, с помощью Append). Ray Toal
о да, моя ошибка: P Yasser

Ваш Ответ

2   ответа
1

каждый раз, когда над строкой выполняется операция по ее изменению, это приводит к новому экземпляру.

Для дальнейшего объяснения, пожалуйста, обратитесь по ссылке ниже:

Разница между строкой и StringBuilder в c #

6

String неизменен - тогда какStringBuilder изменчиво В этом весь смысл. Вы используете его для построения строки, обычно из множества операций добавления. Вы можете сделать это, не создавая свежую копию всех данных каждый раз, что произойдет, если вы используетеString:

// Bad
string x = "";
for (int i = 0; i < 100; i++)
{
    x += i;
}

// Good
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 100; i++)
{
    builder.Append(i);
}
string x = builder.ToString();

См мойстатья о конкатенации строк и мойдругая статья о строках в целом Больше подробностей.

В общем,immutable тип данных - это тот, где вы не можете изменять данные в объекте после создания, тогда какmutable один позволяет тебе поменять (mutateотсюда и название) это. Это не так просто, как кажется.Сообщение Эрика Липперта в блоге о видах неизменности для дополнительной информации.

@ Алекс: Нет, конкатенация строкdoes создайте новую копию каждый раз.
& quot; Строка неизменна & quot; & quot; Вы можете сделать это, не создавая свежую копию всех данных каждый раз, что произойдет, если вы используете String & quot; это означает, что строка лучше, чем stringbuilder, поскольку в строке concat op не создается свежая копия?

Похожие вопросы