Является ли String в Java массивом символов (char[])?

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

Ответ

Нет, String — это не массив символов. Это высокоуровневый, неизменяемый (immutable) класс-обертка, который внутренне может использовать массив символов (char[] или byte[]) для хранения данных.

Ключевые отличия:

Признак String char[]
Изменяемость Неизменяемый (Immutable) Изменяемый (Mutable)
Интерфейс Богатый API (length(), substring(), matches()) Примитивная структура, только доступ по индексу
Безопасность Потокобезопасен (thread-safe) из-за неизменяемости Требует синхронизации
Хранение Может использовать byte[] для оптимизации (с Java 9) Всегда char[]

Пример:

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = "Hello";

// Массив можно изменить напрямую
charArray[0] = 'h'; // Теперь содержит ['h', 'e', 'l', 'l', 'o']

// Строку изменить нельзя. Метод toLowerCase() возвращает НОВЫЙ объект.
String newStr = str.toLowerCase(); // "hello" - новый объект в памяти
System.out.println(str); // "Hello" - исходный объект не изменился

Преобразование:

// String -> char[]
char[] charsFromString = str.toCharArray();

// char[] -> String
String stringFromChars = new String(charArray); // Конструктор
String stringFromChars2 = String.valueOf(charArray); // Фабричный метод