2010-12-02 1 views
0

Можно создать дубликат:
Why to use StringBuffer in Java instead of the string concatenation operatorЗачем использовать Append() вместо +

чем преимущество или цель сделать этот

int a= 42 
StringBuffer sb = new StringBuffer(40); 
String s = sb.append("a = ").append(a).append("!").toString(); 
System.out.println(sb); 

результат> а = 42 !

вместо

int a= 42 
String s = "a = " + a + "!"; 
System.out.println(sb); 

ответ

1

В вашем сценарии, я не уверен, что есть разница в b/c, все ваши «+» находятся на одной строке (что, я считаю, создает только одну строку). В общем, однако, Строки являются неизменяемыми объектами и на самом деле не управляются, а создаются и отбрасываются с помощью StringBuffers.

Итак, у вас будет более эффективный код, если вы используете StringBuffers (и вообще StringBuilders). Если вы google «String vs. StringBuffer vs. StringBuilder», вы можете найти много статей, описывающих статистику.

+0

Спасибо. Я googled, что и прочитал статью, и это объясняло много. – code511788465541441 2010-12-02 16:53:29

1

эффективности. Конкатенация строк в Java в любом случае использует StringBuilders в фоновом режиме, поэтому в некоторых случаях вы можете немного повысить эффективность, контролируя это самостоятельно.

0

Просто запустите код на 10000 раз и измерьте время. Это должно быть очевидно. Некоторая справочная информация: Строка является неизменной, а StringBuilder - нет. Поэтому каждый раз, когда вы объединяете String, вы должны копировать массив.

PS: Иногда компилятор оптимизирует ситуацию. Может быть, если вы сделаете переменную static final, она будет только одна строка внутри и не будет конкатенации.

0

Прежде всего, StringBuffer синхронизирован, поэтому вы обычно используете StringBuilder. + было повторно реализовано для использования StringBuilder некоторое время назад.

Во-вторых, поскольку @Riggy упоминает, что Java фактически оптимизирует +, если они встречаются в одном выражении. Но если вы должны были сделать:

String s = ""; 
s += a; 
s += b; 
s += c; 
s += d; 

Тогда эффективный код станет:

String s =""; 
s = new StringBuilder(s).append(a).toString(); 
s = new StringBuilder(s).append(b).toString(); 
s = new StringBuilder(s).append(c).toString(); 
s = new StringBuilder(s).append(d).toString(); 

, который не является оптимальным для String s = new StringBuilder(s).append(a).append(b).append(c).append(d).toString();

0

Из-за оптимизации компилятора, он может или не может делать какие-либо разница в вашем приложении. Вам нужно будет провести сравнительные тесты скорости, чтобы увидеть.

Но прежде чем вы будете одержимы успехом, заставьте программу работать правильно. «Преждевременная оптимизация - это корень всего зла».