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