Страницы

Поиск по вопросам

вторник, 20 ноября 2018 г.

StringBuilder или + в цикле

String str=""; for (int i = 0; i < count; i++) { str+="я"; }
это правда, что вот этот код превращается компилятором в этот:
StringBuilder sb = new StringBuilder(); for (int j = 0; j < i; j++) { sb.append("я"); }
Если это так, есть ли смысл использовать второй вариант? Ведь первый более читаем.


Ответ

Почитайте тут
//медленно String[] fields = new String[] {"a","b","c","d","e","f","g"}; String s = ""; for (int i = 0; i < fields.length; i++) { s = s + fields[i]; } return s;
//быстро String[] fields = new String[] {"a","b","c","d","e","f","g"}; StringBuilder s = new StringBuilder(); for (int i = 0; i < fields.length; i++) { s.append(fields[i]); } return s.toString();
Никогда не используйте операции конкатенации (оператор +) строки в цикле, особенно если таких операций у вас много, это может очень существенно снизить производительность. Все это происходит потому, что в приведенном выше примере «s = s + fileds[i]» выполняется целых 3 операции: создается StringBuilder на основе строки s, вызывается метод конкатенации append, после конкатенации вызывается метод toString (выглядит так: s = new StringBuilder(s).append(fields[i]).toString();). Целых 3 операции вместо одной! Помимо этого каждый результат s + fileds[i] будет занимать память в куче, как отдельная строка.
Так что ответ на ваш вопрос такой: да, есть смысл использовать StringBuilder вместо конкатенации.

Комментариев нет:

Отправить комментарий