@k5hu Ответов: 2

Неизменяемость метода string и substring() в stringbuilder


code 1:
    StringBuilder sb1 = new StringBuilder("123456");
    sb1.substring(2, 4);
    sb1.deleteCharAt(3);
    sb1.reverse();
    System.out.println(sb1);

выход :
65321

code 2:
String s = "java2s".replace('a', 'Z').trim().concat("Aa");//line 1
    s.substring(0, 2);//line 2
    s.concat("Bb");//line 3
    System.out.println(s);

выход :
jZvZ2sAa

Что я уже пробовал:

код 1 :В java String неизменяема, тогда как StringBuilder и StringBuffer изменяемы, но почему метод substring() не вносит никаких изменений в sb1, даже если это объект StringBuilder?

код 2:В строке 1 метод concat() внес изменение в строку "java2s", но почему этого не происходит в строке 3?

Может ли кто-нибудь прояснить мои сомнения?
Заранее спасибо.

2 Ответов

Рейтинг:
9

OriginalGriff

Поскольку substring возвращает новую строку, она никоим образом не влияет на оригинал, будь то строка или stringbuilder.

Concat делает то же самое: он возвращает новую строку, которая является комбинацией параметров - она никоим образом не влияет на входные данные.

Думайте об этом как о числах:

24 + 77
Возвращает значение 101 - оно не меняет число 24 или 77 на 101, и вы этого не ожидаете. Так почему же вы ожидаете, что конкатенация вашего первого имени с вашим вторым именем тоже изменится? Если я правильно соединил свои: "пол" и "Гриффин", я получаю другой объект, мое "официальное имя": "пол Гриффин". Это не меняет того, что моя мать называла меня "пол", или того, что полицейские называют меня "Мистер Гриффин".


Richard MacCutchan

Так что вы хорошо известны полиции ...

OriginalGriff

Маленький городок... большие мотоциклы ... :Д

Рейтинг:
14

Richard MacCutchan

1. The substring метод возвращает указанные символы, он не влияет на существующую строку. Видеть подстрока (Java Platform SE 7 )[^].

2. The concat метод создает новую строку путем объединения оригинала с новыми символами и возвращает вновь созданную строку. Оригинал остается неизменным; вот что значит "неизменный".