С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Разница в способах вывода на TextView - Программирование Android

01.12.2012, 13:54. Просмотров 750. Ответов 9
Метки нет (Все метки)

Приветствую!

Возник такой теоретическо-практический вопрос, хотел бы его задать:
Выполняя обучающие уроки с одного из ресурсов, встретил такой способ вывода составного текста в TextView:

Java
1
2
3
4
DateField.setText(new StringBuilder()
        .append(CreateTime(mYear)).append("/")
        .append(CreateTime(mMonth+1)).append("/")
        .append(CreateTime(mDay)));
Ф-ция CreateTime преобразовывает числовое представление в строку.
Приведённый код выводит дату с разделителями.

Для эксперимента, по аналогии с C++ Builder'om, с которым я ранее работал, я написал так:

Java
1
DateField.setText(CreateTime(mYear) + "/" + CreateTime(mMonth+1) + "/" + CreateTime(mDay));
Оба варианта работают. И я не особо понимаю, для чего автор уроков реализовал более сложную конструкцию.
Мог бы кто-то вкратце разъяснить, в чём принципиальная разница между такими двумя способами вывода, и почему предпочтительно использовать конструкцию со "StringBuilder" и ".append()"?
Спасибо заранее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 13:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разница в способах вывода на TextView (Программирование Android):

Текст из TextView перенести в другой TextView по нажатию Button - Программирование Android
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную вещь - текст из TextView перенести в...

TextView txt = new TextView(this); - ошибка - Программирование Android
Возникла проблема с динамическим создание TextView в цыкле, хотя в другом месте создается таким же образом все нормально TextView txt =...

О способах добавления данных в таблицы - MySQL
Я практически не знакома с SQL, поэтому прошу не обижаться, если я назову какие-то термины неправильно. Есть база данных, в которую...

Какое отличие в способах прибавления к массиву - Python
В чем отличие? m = for i in range(int(input())): m += input() и m = for i in range(int(input())):

Арифметических операций над многоразрядными числами при следующих способах хранения - Turbo Pascal
Арифметических операций над многоразрядными числами при следующих способах хранения: а) с использованием однонаправленного списка с...

Подскажите о способах реанимировать материнскую плату 3 длинных сигнала при включении - Материнские платы
Добрый день! В системном блоке "закончилась" материнская плата (при включении издает 3 длинных сигнала, если я ошибаюсь и есть способ...

9
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
01.12.2012, 16:59 #2
Конкретно в данном случае разницы никакой, по мне так первый вариант читабельнее второго.
Разница в реализациях следующая:
Второй вариант компилятор преобразит в первый, просто второй вариант проще в написании(короче).
Плюс могут возникнуть проблемы с использованием конкатенации(второй вариант - оператор "+") в цикле.
Вот данная дискуссия .
Теперь идем далее и открываем javadocs:
String - immutable
StringBuffer - mutable, synchronized (tread-safety)
StringBuilder - mutable, not-synchronized (not tread safety).
Вот и вся разница по большому счету между String vs StringBuilder
Вот интересный пост на эту тему.
1
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
01.12.2012, 22:22  [ТС] #3
lifestyle, большое спасибо за такой ёмкий ответ!

Прочитав также ваш ответ в моей соседней теме, прихожу к выводу, что уроки-уроками, а всё-таки надо "нарастить" базу с помощью developer.android.com, чтобы я мог аргументированно отвечать себе на подобные вопросы:)
0
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
01.12.2012, 23:42 #4
Цитата Сообщение от kievkao Посмотреть сообщение
lifestyle, большое спасибо за такой ёмкий ответ!

Прочитав также ваш ответ в моей соседней теме, прихожу к выводу, что уроки-уроками, а всё-таки надо "нарастить" базу с помощью developer.android.com, чтобы я мог аргументированно отвечать себе на подобные вопросы
Вообще то String StringBuilder StringBuffer это Java, но да, уроки уроками, но теория с документацией это MUST))
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.12.2012, 16:43 #5
Цитата Сообщение от kievkao Посмотреть сообщение
в чём принципиальная разница
первый вариант меньше потребляет ресурсов.
0
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
02.12.2012, 23:29 #6
Цитата Сообщение от V0v1k Посмотреть сообщение
первый вариант меньше потребляет ресурсов.
Не факт т.к. при компиляции структура конкатенции преобразовывается в структуру первого примера...
Люди делали тесты на производительность - однозначного ответа не было...
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.12.2012, 01:24 #7
насколько я знаю (хотя все зависит от компилятора и все имеет свойство изменятся), второй вариант не просто преобразовывается в первый, а делает это 4 раза (по разу для каждой конкатенации), то есть будет создано 4 StringBuilder'a
0
lifestyle
Mobile Developer
232 / 228 / 4
Регистрация: 10.05.2009
Сообщений: 917
03.12.2012, 01:41 #8
Цитата Сообщение от V0v1k Посмотреть сообщение
насколько я знаю (хотя все зависит от компилятора и все имеет свойство изменятся), второй вариант не просто преобразовывается в первый, а делает это 4 раза (по разу для каждой конкатенации), то есть будет создано 4 StringBuilder'a
Хм... возможно, но это все в процессе компиляции а не в runtime"е
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
03.12.2012, 02:20 #9
ну да, преобразовано в процессе компиляции, а создание 4 объектов StringBuilder'a и 4 прогона по первому варианту будут в рантайме.
0
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
04.12.2012, 11:40  [ТС] #10
Ничего себе, - пару дней не зашёл, а тут полемика уже на две страницы..

С удовольствием почитаю
0
04.12.2012, 11:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2012, 11:40
Привет! Вот еще темы с ответами:

найти решение системы линейных уравнений при различных способах выбора базиса - Алгебра
найти решение системы линейных уравнений при различных способах выбора базиса сама система- 2х1+х2-х3=-9 -х1-х2+4х3-5х4=9 ...

MDI - гибриды. Фреймы, вкладки. Рассказываем о своих идеях, примерах и прочих способах реализации - Visual Basic
Давайте поговорим о гибридах. Вот три варианта: Фреймовый интерфейс Окно программы делится на несколько фреймов. В каждом из...

Вирус не дает скачать/установить антивирус, также закрывает браузеры при поиске антивирусов и способах лечения - Удаление вирусов
Здравствуйте. После использования чужой флешки без антивируса начались следующие проблемы: при установке антивируса с компьютера процесс...

Настройка вывода нуля вместо игнорирования вывода отсутствующих запросов - SQL Server
Доброго всем дня! Есть скрипт, который выводит дату, далее через пробел час суток и в другом столбце количество пользователей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.