Изменить неизменный объект, Java
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?
Ответы (4)
0 плюса
У меня есть один StringBuilder, неизменный объект, и если я использую метод для объекта, он вернет мне новое значение объекта с тем же ссылочным объектом.
- Не всегда метод возвращает вам один и тот же ссылочный объект. Это может создать новый объект и вернуть его. Всегда лучше проверять документы, прежде чем что-либо предполагать.
Почему, когда я использую
a.substring ( int a, int b )
, это не модифицирует объектStringBuilder
?
- Если вы читаете документацию , в ней четко указано, что
substring(int,int)
метод возвращает новую строку . Это отвечает, почему ваш объект не изменяется.
Почему, если я использую метод,
a.append("value")
я изменяю значениеStringBuilder
объекта?
- Опять же, если вы читаете документы для
append(String)
, он ясно заявляет, что это - Возвращает: ссылка на этот объект. , Этот метод соответствует тому, чем было «ваше мышление» .
4 плюса
Метод .substring () возвращает новый String
объект, он не изменяет сам StringBuilder
себя.
0 плюса
Почему, когда я использую a.substring (int a, int b), он не модифицирует объект StringBuilder?
потому что substring()
возвращает новую строку, она не изменяется StringBuilder
.
char ch = a.charAt(4);
, charAt()
возвращает символ, основанный на индексе, и так как индекс равен нулю, он возвращается e
.
0 плюса
Тот факт, что объект является «изменяемым», не означает, что каждый метод, который может выполнить объект, должен его изменить. Типичными примерами являются equals (), getClass () ... append (), однако он изменяет объект StringBuilder.
Автор: Mario Ishac Размещён: 27.12.2015 05:11Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- substring Как проверить, содержит ли строка подстроку в Bash
- substring Подстрока Java: «строковый индекс вне диапазона»
- substring Строковый индекс за пределами границ? (Java, цикл подстроки)
- substring Как проверить, содержит ли строка подстроку в JavaScript?
- substring Как проверить, начинается ли строка C ++ std :: string с определенной строки, и преобразовать подстроку в int?
- substring Найти n-е вхождение подстроки в строку
- stringbuilder StringBuilder: как получить финальную строку?
- stringbuilder Разница между StringBuilder и StringBuffer
- stringbuilder Конкатенация строк небезопасна в C #, нужно использовать StringBuilder?
- stringbuilder StringBuilder против конкатенации строк в toString () в Java
- stringbuilder Когда и почему я должен использовать TStringBuilder?
- stringbuilder Выгрузка Java StringBuilder в файл