Главная страница » C# » 33. Неизменяемость строк
В C# строки (string
) являются неизменяемыми (immutable). Это означает, что после создания строка не может быть изменена. Любая операция, которая кажется изменяющей строку, на самом деле создаёт новую строку, а старая остаётся без изменений.
📌 Пример:
string str = "Hello";
str += " World"; // Создаётся новая строка, а не изменяется старая
Console.WriteLine(str); // Выведет "Hello World"
🔹 Переменная str
теперь указывает на новую строку "Hello World"
, а старая строка "Hello"
осталась в памяти до момента её удаления сборщиком мусора.
Основные причины неизменяемости строк:
📌 Пример интернирования строк:
string a = "Hello";
string b = "Hello";
Console.WriteLine(object.ReferenceEquals(a, b)); // True (оба указывают на один объект в памяти)
🔹 C# использует пул строк, поэтому одинаковые строковые литералы могут ссылаться на один и тот же объект.
Любая операция над строкой не изменяет её, а создаёт новую строку.
📌 Пример:
string text = "C#";
text.ToUpper(); // Создана новая строка "C#" -> "C#", но не изменён text
Console.WriteLine(text); // Выведет "C#"
🔹 ToUpper()
возвращает новую строку, но text
остаётся неизменным.
Чтобы сохранить результат, нужно присвоить его обратно:
text = text.ToUpper();
Console.WriteLine(text); // "C#"
StringBuilder
для изменения строкЕсли нужно часто изменять строку (например, добавлять или удалять символы), лучше использовать StringBuilder
. Он изменяет строку без создания новых объектов в памяти.
📌 Пример:
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder("Привет");
sb.Append(", мир!"); // Изменяется сам объект StringBuilder
Console.WriteLine(sb); // Выведет "Привет, мир!"
}
}
🔹 В отличие от string
, StringBuilder
изменяет строку, а не создаёт новую.
✅ Строки в C# неизменяемы, любая операция создаёт новую строку.
✅ Неизменяемость помогает в оптимизации памяти, потокобезопасности и защите данных.
✅ Использование StringBuilder
позволяет изменять строки эффективно без лишних выделений памяти.
🚀 Теперь вы знаете, как работать со строками в C# и когда использовать StringBuilder
!
s = "Hello"
и попробуйте изменить её, добавив " World"
.StringBuilder
для добавления "!!!"
к строке.📌 Пример решения:
using System;
using System.Text;
class Program
{
static void Main()
{
string s = "Hello";
s += " World"; // Создаётся новая строка
Console.WriteLine(s); // Выведет "Hello World"
StringBuilder sb = new StringBuilder(s);
sb.Append("!!!"); // Добавляем в StringBuilder
Console.WriteLine(sb); // Выведет "Hello World!!!"
}
}
Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024-2025 Все права защищены. CodeFor.