Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Сложение и преобразование строк.




Сложение и преобразование строк.

Еще для вас сделали в классе String одну вспомогательную операцию. Это «+», чтобы не вызывать конкатенацию, а просто складывать все через знак «плюс». Я могу сделать так.

run: abc628abc276. 25 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Я думаю, вы понимаете, что эта операция «+» не складывает строку с числом, а число преобразуется в строку и две строки складываются. Операция очень удобная – конкатенация строк. И опять же, строки не изменяемы, а значит, создается новый объект.

Вопрос: Что нужно знать про эту операцию?

Ответ: Вообще ее не рекомендуется использовать.

Вопрос: Почему?

Ответ: А представьте себе длинную цепочку из этих плюсов. Ведь операция «+» она бинарная. И каждый раз, когда она срабатывает, операнд слева и операнд справа. У нас что создается? Новый объект. И у вас получается строка, где складываются 10 маленьких строк, и будет создано 9 никому не нужных объектов, которые будут временные. А потом сборка мусора для них. И что в этом хорошего? Ничего.

В такой ситуации надо очень хорошо подумать. Если это клиентская машина, то меня не очень волнует производительность на клиентской машине. А если это сервер? То волнует.

Классы динамических строк.

Еще очень часто наши задачи со строками сводятся, конечно, к преобразованию «в строку» и «из строки» в обратную сторону. Преобразовать все что угодно в строку в можете совершенно легко используя метод « toString ». Вы спросите: «Все можно преобразовать в toString? » - Абсолютно все.

Вопрос: Почему?

Ответ: А дело в том, что метод toString по идеологии Java находится в классе Object на самой вершине иерархии и доступен всем. И всем кому он нужен, они написали свою собственную версию toString. Поэтому любой тип можно преобразовать в строку, если мы говорим о классах-обертках.

Преобразование в строку (toString) Результат
run: true true СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 3 секунды)
Преобразование из строки (parse)  
run: СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 1 секунда)

По поводу преобразования из строки.

Он (метод Parse в классе-обертке) получает строку, которую пользователь ввел с клавиатуры, а возвращает простой тип, а не обертку.

Раз уж мы заговорили об этих обертках и про класс String, то сразу скажу еще один важный момент. Все объекты, которые вы создаете, используя классы-обертки, они тоже все не изменяемые, как и строка. Поэтому если вы создали обертку для числа 5, то не думайте, что вы сможете эту обертку изменить. Если вы начнете что-то менять и скажете я изменил, то скорее всего это просто новая обертка.

Поэтому надо быть аккуратным. Потому что неконтролируемое создание объектов может привести только к одному – запустится сборка мусора.

Вопрос: Что же нам делать, если мы хотим написать приличный код, а это все неизменяемо?

Ответ: Работать с простыми типами.

Вопрос: А строки?

Ответ: Работать не со String, а с другими строками. Вот они – пожалуйста.

  • String – это не изменяемые строки.
  • StringBuffer – это потокобезопасный строка. Мы потоки пока не разбираем.
  • StringBuilder – это изменяемая строка.

Вопрос: Что значит изменяемая строка?

Ответ: Это значит, что создается один объект класса StringBuilder, который внутри за счет своих собственных операций эту строку меняет. Работает он медленнее, но сборки мусора нет, потому что объекта нет.

Вы спросите, а каков размер этой строки? Ну, пока не кончилась ваша память. Так что особых проблем я не вижу. Если что-то не вмещается в вашу память – то это уже ваши проблемы, а не класса StringBuilder.

  • StringTokenizer – он неинтересен. Это старинный класс, который позволяет строку разбить на подстроки.
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...