По сути, компилятор заменяет экземпляры String
конкатенации на StringBuilder
s, поэтому ваша строка
result.append(i + ": " + 2*i + " ");
Изменено на
result.append(new StringBuilder().append(i).append(": ").append(2*i).append(" ").toString());
Как вы можете видеть, он просто создает другой StringBuilder
, который является избыточным, поскольку у вас уже есть такой. Кроме того, он должен делать это в каждой итерации цикла, что приводит к значительному созданию и сбору мусора.
Так что да, определенно было бы лучше просто добавить к StringBuilder
, который у вас уже есть, вместо объединения. Независимо от того, делаете ли вы это в одной беглой строке, это в основном вопрос предпочтений.
Я не уверен, что ответ, который вы нашли, означает "не может заменить StringBuilder
". Возможно, они имели в виду, что он не будет повторно использовать ваш существующий компоновщик (и вместо этого создаст новый).
Это все еще действует для Java 8, хотя с тех пор существуют альтернативные методы потоковой передачи, как показывает один из других ответов.