Scala использует строки Java (java.lang.String
), поэтому его конкатенация строк такая же, как и в Java: в обоих случаях происходит одно и то же. (В конце концов, среда выполнения та же самая.) В Scala есть специальный класс StringBuilder
, который "предоставляет API, совместимый с java.lang.StringBuilder
"; см. http://www.scala -lang.org / api / 2.7.5 / scala / StringBuilder.html .
Но с точки зрения "лучших практик", я думаю, что большинство людей, как правило, считают, что лучше писать простой, понятный код, чем максимально эффективный код, за исключением случаев, когда существует реальная проблема с производительностью или веская причина ожидать ее. Оператор +
на самом деле не имеет «плохой производительности», просто s += "foo"
эквивалентен s = s + "foo"
(то есть он создает новый объект String
), что означает, что, если вы делаете много конкатенации к (как выглядит) «одной строке», вы можете избежать создания ненужных объектов & mdash; и многократно переписывать более ранние части из одной строки в другую & mdash; используя StringBuilder
вместо String
. Обычно разница не важна. (Конечно, «простой, понятный код» немного противоречив: использование +=
проще, использование StringBuilder
более понятно. Но, тем не менее, решение обычно должно основываться на соображениях написания кода, а не на незначительных соображениях производительности.)