Если строки построены с использованием одного выражения конкатенации;например,
String s = "You " + verb + " to " + user + " \"" + text + "\"";
, тогда это более или менее эквивалентно более длинному циклу:
StringBuilder sb = new StringBuilder();
sb.append("You");
sb.append(verb);
sb.append(" to ");
sb.append(user);
sb.append(" \"");
sb.append(text );
sb.append('"');
String s = sb.toString();
(Фактически, компилятор Java скомпилирует первое в второе ... почти.)
Проблемы с эффективностью возникают, когда вы начинаете создавать промежуточные строки или строить строки, используя +=
и так далее.В этот момент StringBuilder
становится более эффективным, потому что вы уменьшаете количество промежуточных строк, которые создаются и затем выбрасываются.
Теперь, когда вы используете String.format()
, он должен использовать StringBuilder
подкапот.Тем не менее, format
также должен анализировать формат String каждый раз, когда вы делаете вызов, и это не накладные расходы, если вы оптимально строите строку.
Сказав это,Я бы посоветовал написать код так, чтобы он был наиболее читабельным.О самом эффективном способе построения строк следует беспокоиться только в том случае, если profiling говорит о том, что это реальная проблема производительности.(Сейчас вы тратите время на размышления о способах решения проблемы производительности, которая может оказаться незначительной или неактуальной.)
В другом ответе упоминается, что использование строки формата может упростить поддержку нескольких языков.Это правда, хотя существуют ограничения в отношении того, что вы можете сделать в отношении таких вещей, как множественное число, пол и т. Д.