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