String
- это неизменяемый тип в Java, что означает, что вы не можете изменить последовательность символов, которую он представляет, после создания String
.
Вы можете использовать экземпляр класса StringBuilder
для создания нового экземпляра String
, который представляет некоторую трансформацию исходного String
. Например, добавив дефис, как вы просите, вы можете сделать это:
String str = "xxxxx";
StringBuilder builder = new StringBuilder(str);
builder.insert(1, '-');
String hyphenated = builder.toString(); // "x-xxxx"
StringBuilder
изначально содержит копию содержимого str
; "xxxxx"
.
Вызов insert
изменяет содержимое компоновщика на "x-xxxx"
.
Вызов toString
возвращает новое String
, содержащее копию содержимого построителя строк.
Поскольку тип String
является неизменным, никакие манипуляции с содержимым StringBuilder
никогда не изменят содержимое str
или hyphenated
.
Вы можете изменить то, что String
экземпляр str
ссылается на , выполнив
str = builder.toString();
вместо
String hyphenated = builder.toString();
Но никогда не изменяется содержимое строки, на которую ссылается str
, потому что это невозможно. Вместо этого str
раньше ссылался на экземпляр, содержащий "xxxxx"
, а теперь ссылается на экземпляр, содержащий "x-xxxx"
.