Intereting Posts
Выберите несколько элементов из списка и измените цвет только выбранного элемента. Получение разного байта scanRecord данные для одного устройства BLE во время сканирования с различными версиями Android-устройства Работа с фрагментом и пейджером просмотров: не может изменить тег фрагмента И рекурсивная запись в executePendingTransactions Android Webview HTML Загрузка проблемы с Javascript Менеджер AVD не обнаружит мой телефон HTC Hero как виртуальное устройство Чтение ActivityManager-журналов на устройстве Jelly Bean? В Android, почему все классы org.apache.http. * Устарели в API 22 (и что я должен использовать в качестве замены)? Phonegap / HTML5 и проблема изменения размера экрана Android при повороте с пейзажа на портрет AndroidManifest.xml подразумевает vs явные разрешения (use-feature vs uses-permission) Нет идентификатора для моего Android UI Testing Как читать файл непосредственно из .zip-файла без его извлечения в android Как хранить данные из нескольких приложений в одном месте? Сгенерированный список классов не существует {module root} \ build \ intermediates \ data-binding-info \ release \ _generated.txt Как получить SharedPreferences из PreferenceActivity в Android? Конвертировать apk в zip flashable в clockWorkMod?

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 вручную вместо конкатенации строк?

Solutions Collecting From Web of "Android StringBuilder vs String Concatenation"

Компилятор делает именно то, что вы предлагаете. Вы можете печатать байт-коды сгенерированного файла .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!";