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