Главная страница » 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.
Язык сайта: