Помогает ли это, если вы знаете, что они эквивалентны:
x+="k";
x = new StringBuffer(x).append("k").toString();
Или в более новой Java (я забыл, от 1.5 или 1.6) он использует это вместо этого, поскольку он по крайней мере избегает блокировки, которую StringBuffer
наложил на него:
x = new StringBuilder(x).append("k").toString();
При всем этом управлении памятью неудивительно, что метод concat(String)
может работать лучше. С другой стороны, если вы собираетесь делать этот цикл, вам лучше не конвертировать туда и обратно между изменяемыми объектами и неизменяемыми:
String x = "x";
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder(x);
for (int i = 0; i < 100000; i++) {
sb.append("f");
}
x = sb.toString();
System.out.println(System.currentTimeMillis() - start);
Поскольку StringBuilder
(и StringBuffer
тоже, как это бывает, но по другим причинам это менее эффективно) выполняет интеллектуальное управление буфером для вас, это будет значительно более быстрый метод; Чтобы работать даже быстрее, это потребовало бы реальных усилий (или, по крайней мере, предварительного определения размера буфера, что в данном случае возможно, но в целом сложнее).