Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Как изменить String в Java
В Java String является неизменяемым объектом (immutable). Это означает, что один раз созданный String не может быть изменен. Любая операция, которая кажется изменением String, на самом деле создает новый объект String.
Почему String неизменяемый?
String str = "Hello";
str = str + " World"; // Создает новый String объект
Переменная str теперь указывает на другой объект в памяти. Исходный String "Hello" остается неизменным.
Способы "изменения" String
1. Конкатенация строк
String result = "Hello" + " " + "World";
// или
String result = "Hello".concat(" World");
Каждая операция создает новый String.
2. StringBuilder (рекомендуется для множественных изменений)
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString();
StringBuilder изменяемый (mutable) и намного эффективнее для частых добавлений.
3. StringBuffer (потокобезопасная альтернатива)
StringBuffer sb = new StringBuffer();
sb.append("Hello");
sb.append(" World");
String result = sb.toString();
StringBuffer синхронизирован и безопасен для многопоточности, но медленнее StringBuilder.
Примеры преобразований String
// Замена символов
String str = "Hello";
String modified = str.replace('l', 'x'); // "Hexxo"
// Изменение регистра
String upper = str.toUpperCase(); // "HELLO"
String lower = str.toLowerCase(); // "hello"
// Удаление пробелов
String trimmed = " Hello ".trim(); // "Hello"
// Разделение и объединение
String[] parts = "a,b,c".split(",");
String joined = String.join("-", parts); // "a-b-c"
Почему это важно?
- Безопасность: String используется часто, неизменяемость защищает от случайных изменений.
- Производительность: Java может кэшировать и переиспользовать String.
- Потокобезопасность: Один и тот же String безопасно использовать в разных потоках.
Антипаттерн
// НЕ ДЕЛАЙ ТАК (неэффективно)
String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // Создает 1000 новых String объектов!
}
// ДЕЛАЙ ТАК
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i);
}
String result = sb.toString();
Вывод: используй StringBuilder для множественных операций изменения строк, иначе теряешь производительность из-за создания большого количества временных объектов.