Intereting Posts
Как получать уведомления об изменении системы в Android? Android: использование стиля по умолчанию в заголовке настраиваемого диалога «Break On Exception» в Eclipse / Android Отладка в Sony Xperia (E2003) перестала работать внезапно Интеграция внешнего вида 365 входа в приложение для Android Намерение открыть профиль пользователя Instagram на Android Моя сборка не работает, когда я использую Ant для сборки и проект Android с несколькими библиотеками RoboAttributeSet Robolectric никогда не читается Нечисловой второй аргумент в "wordlist" Приложение Hello World для Android, Ошибка: workspace \ appcompat_v7 \ res \ values-v21 \ styles_base.xml Ресурс не найден, который соответствует указанному имени Ведение кодовой базы данных гибридного / веб-приложения PhoneGap Как добавить звуковые эффекты в звуковой файл в Android Можно ли «грациозно разлагать» приложение андроида? Поддерживает ли Android поддержку структуры MVC (Model View Controller)? Вернитесь на главный экран после завершения операции

Android StringBuilder vs String Concatenation

Я читал эту страницу документации, http://developer.android.com/reference/android/util/Log.html .

Раздел здесь привлек мое внимание:

Совет. Не забывайте, что когда вы звоните, как

Log.v(TAG, "index=" + i);

Что, когда вы создаете строку для передачи в Log.d, компилятор использует StringBuilder и имеет место по крайней мере три распределения: сам StringBuilder, буфер и объект String. Реально, есть и другое распределение буфера и копирование, и еще большее давление на gc. Это означает, что если ваше сообщение журнала отфильтровано, вы можете выполнять значительную работу и накладывать значительные накладные расходы.

Это означает, что компилятор Android принимает конкатенации строк (+) и преобразовывает их в команды StringBuilder и append.

Правильно ли мое предположение или же лучше использовать StringBuilder вручную вместо конкатенации строк?

Компилятор делает именно то, что вы предлагаете. Вы можете печатать байт-коды сгенерированного файла .class (используя javap -c ) и видеть вызовы для создания и использования StringBuilder .

Однако обычно стоит делать это вручную, когда конкатенации строк распределяются по нескольким строкам кода. Компилятор обычно выделяет отдельный StringBuilder для каждого выражения, содержащего строку, включая + .

Ответ Теда Хоппа хорош, но он несколько раз читал его, чтобы понять. Вот отредактированный ответ, который, надеюсь, более ясен.

Конкатенация строк (т. String myString = "Hello " + "World"; Использование + , как в String myString = "Hello " + "World"; ) использует StringBuilder в фоновом режиме вместе с другими выделениями. Таким образом, для чего-либо другого, кроме простой однократной конкатенации, было бы лучше использовать StringBuilder самостоятельно.

Например,

 StringBuilder myString = new StringBuilder(); myString.append("Hello "); myString.append("to "); myString.append("everyone "); myString.append("in "); myString.append("the "); myString.append("world!"); 

Это лучше чем

 String myString = "Hello " + "to " + "everyone " + "in " + "the " + "world!";