Задача со строками: что будет выведено? Как перегружен оператор == для строк? Что такое пул интернирования строк?
Answer from AI
sobes.tech AI
В C# оператор == для строк перегружен так, что сравнивается не ссылка на объект, а содержимое строк — их последовательность символов. Это значит, что две разные строковые переменные с одинаковым текстом при сравнении через == вернут true.
Пул интернирования строк — это специальное хранилище в памяти, где хранятся уникальные экземпляры строковых литералов. Когда создаётся строка литералом, CLR проверяет пул: если такая строка уже есть, возвращается ссылка на неё, иначе строка добавляется в пул. Это позволяет экономить память и ускорять сравнения строк, так как одинаковые литералы ссылаются на один объект.
Пример:
string a = "hello";
string b = "hello";
string c = new string(new char[] {'h','e','l','l','o'});
Console.WriteLine(a == b); // True, содержимое одинаковое
Console.WriteLine(object.ReferenceEquals(a, b)); // True, обе ссылаются на пул
Console.WriteLine(a == c); // True, содержимое одинаковое
Console.WriteLine(object.ReferenceEquals(a, c)); // False, c создана явно, не из пула
Таким образом, оператор == сравнивает содержимое строк, а пул интернирования обеспечивает переиспользование одинаковых строковых литералов.