Это плохо?
(представьте, что он больше)
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
или лучше в StringBuilder/StringBuffer?
Это плохо?
(представьте, что он больше)
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
или лучше в StringBuilder/StringBuffer?
Компилятор Java преобразует его в StringBuilder для повышения производительности повторной конкатенации строк. http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#15.18.1.2
Его, когда вы конкатенируете в компиляторе цикла, не может самостоятельно заменить StringBuilder тем, что, когда вы должны рассмотреть вопрос о конкатенации в StringBuilder.
Нет, все в порядке. Если вы используете компилятор Sun Java 6, он фактически использует StringBuilder.
Прочтите эту статью .
Javadoc для StringBuffer указывает из Java 5.0
Класс StringBuilder обычно должен использоваться в предпочтении этому, поскольку он поддерживает все те же операции, но быстрее, поскольку он не выполняет синхронизацию.
Компилятор объединит строковые литералы, чтобы он был таким же, как и запись
String myString = "this is my stringand " + this.methodCall() + " answer is : " + count;
что совпадает с
String myString = new StringBuilder().append("this is my stringand ").append(methodCall()).append(" answer is : ").append(count).toString();
Я бы не стал беспокоиться о производительности, если вам не нужно устранять мусор из вашей системы, и в этом случае вы не будете использовать Strings здесь. (Его маловероятно, что вам нужно беспокоиться об этом)
Это будет более удобочитаемым, если вы используете StringBuilder
/StringBuffer
(выберите на основе модели вашего приложения "Модель темы" )
если вы пишете
String str = "abc";
str+="def";
Внутри он создаст StringBuilder
для того же
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldc #6; //String def
16: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
Относительно новая статья с графом, показывающая, что конкатенация с '+' масштабируется довольно ужасно. И как упоминалось в другом ответе, StringBuilder, вероятно, будет более читабельным.
(представьте, что он больше)...
Конкатенация строк с помощью оператора "+" создает много временных объектов и увеличивает сбор мусора. Использование класса StringBuffer более эффективен.
Подробнее здесь: http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html
StringBuffer strBuf = new StringBuffer();
strBuf.append("this");
strBuf.append("is");
strBuf.append("my");
strBuf.append("string");
strBuf.append("and");
strBuf.append(this.methodCall());
strBuf.append(" answer ");
strBuf.append("is : ");
strBuf.append(count);
Может быть связано: Конкатенация строк: concat() vs "+" Оператор
Вы должны предпочесть StringBuilder для конкатенации строк, поскольку у вас есть вызов метода и переменная, добавляемая к строкам.
Однако количество простых строк, таких как "this" и "is", не влияет на производительность, поскольку компилятор будет эффективно обрабатывать их и создавать интернированные строки, которые попадут в байт-код. Сказав это, упомянутые Струны не будут иметь накладных расходов на конечную производительность.
Я не думаю, что это имеет значение для производительности, когда строка написана так: компилятор все равно оптимизирует ее.