Ответ
Класс String в Java представляет собой неизменяемую (immutable) последовательность символов Unicode.
Ключевые характеристики:
- Неизменяемость (Immutability): Любая операция, модифицирующая строку (например,
concat(),substring(),toLowerCase()), возвращает новый объектString. Исходная строка остается неизменной. - String Pool (пул строк): Механизм для оптимизации памяти. Строковые литералы (например,
"text") автоматически помещаются в пул. Создание черезnew String("text")всегда создает новый объект в куче (heap), даже если такой литерал уже есть в пуле. - Сравнение: Оператор
==сравнивает ссылки на объекты. Методequals()сравнивает содержимое строк. - Важные методы:
length(),charAt(),equals(),equalsIgnoreCase(),substring(),replace(),split(),indexOf().
Пример, демонстрирующий пул строк и сравнение:
String s1 = "hello"; // Литерал, попадает в String Pool
String s2 = "hello"; // Ссылается на тот же объект из пула
String s3 = new String("hello"); // Новый объект в куче
System.out.println(s1 == s2); // true (одна и та же ссылка)
System.out.println(s1 == s3); // false (разные ссылки)
System.out.println(s1.equals(s3)); // true (одинаковое содержимое)
Для работы с изменяемыми последовательностями символов используются:
StringBuilder— не потокобезопасный, высокая производительность.StringBuffer— потокобезопасный (синхронизированные методы), но медленнее.