Что такое класс String в Java?

«Что такое класс String в Java?» — вопрос из категории Java Core, который задают на 24% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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().