Изменить неизменный объект, Java

java substring stringbuilder

175 просмотра

4 ответа

Я запутался в этом примере:

StringBuilder a = new StringBuilder("abcde");
String subStr = a.substring( a.indexOf("a") , a.indexOf("c")  );
int leng = a.length();
char ch = a.charAt(4);
System.out.println( subStr + " " + leng + " " + ch);
//the result will be : subStr = abc  , leng = 5  ch = e

Мой вопрос: почему ch = e, и это не создает исключение?

Мое мышление: у
меня есть один StringBuilder, неизменный объект, и если я использую метод для объекта, он вернет мне новое значение объекта с тем же ссылочным объектом.

  • Почему, когда я использую a.substring ( int a, int b ), он не изменяет объект StringBuilder?
  • Почему, если я использую метод, a.append("value")я изменяю значение объекта StringBuilder?
Автор: lirio oliro Источник Размещён: 12.11.2019 09:14

Ответы (4)


0 плюса

Решение

У меня есть один StringBuilder, неизменный объект, и если я использую метод для объекта, он вернет мне новое значение объекта с тем же ссылочным объектом.

  • Не всегда метод возвращает вам один и тот же ссылочный объект. Это может создать новый объект и вернуть его. Всегда лучше проверять документы, прежде чем что-либо предполагать.

Почему, когда я использую a.substring ( int a, int b ), это не модифицирует объект StringBuilder?

  • Если вы читаете документацию , в ней четко указано, что substring(int,int)метод возвращает новую строку . Это отвечает, почему ваш объект не изменяется.

Почему, если я использую метод, a.append("value")я изменяю значение StringBuilderобъекта?

  • Опять же, если вы читаете документы для append(String), он ясно заявляет, что это - Возвращает: ссылка на этот объект. , Этот метод соответствует тому, чем было «ваше мышление» .
Автор: Atri Размещён: 27.12.2015 05:49

4 плюса

Метод .substring () возвращает новый String объект, он не изменяет сам StringBuilderсебя.

Автор: Mohammed Aouf Zouag Размещён: 27.12.2015 05:09

0 плюса

Почему, когда я использую a.substring (int a, int b), он не модифицирует объект StringBuilder?

потому что substring()возвращает новую строку, она не изменяется StringBuilder.

char ch = a.charAt(4);, charAt()возвращает символ, основанный на индексе, и так как индекс равен нулю, он возвращается e.

Автор: Ramanlfc Размещён: 27.12.2015 05:10

0 плюса

Тот факт, что объект является «изменяемым», не означает, что каждый метод, который может выполнить объект, должен его изменить. Типичными примерами являются equals (), getClass () ... append (), однако он изменяет объект StringBuilder.

Автор: Mario Ishac Размещён: 27.12.2015 05:11
Вопросы из категории :
32x32