Что такое строки (String) в Java?

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

Ответ

Класс 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 — потокобезопасный (синхронизированные методы), но медленнее.