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 вместо конкатенации.
Комментариев нет:
Отправить комментарий