Ответ
Нет, 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); // Фабричный метод