In Java, it’s a common best practice to do string concatenation with StringBuilder due to the poor performance of appending strings using the + operator. Is the same practice recommended for Scala or has the language improved on how java performs its string concatenation?
In Java, it’s a common best practice to do string concatenation with StringBuilder due
Share
Scala uses Java strings (
java.lang.String), so its string concatenation is the same as Java’s: the same thing is taking place in both. (The runtime is the same, after all.) There is a specialStringBuilderclass in Scala, that “provides an API compatible withjava.lang.StringBuilder“; see http://www.scala-lang.org/api/2.7.5/scala/StringBuilder.html.But in terms of “best practices”, I think most people would generally consider it better to write simple, clear code than maximally efficient code, except when there’s an actual performance problem or a good reason to expect one. The
+operator doesn’t really have “poor performance”, it’s just thats += "foo"is equivalent tos = s + "foo"(i.e. it creates a newStringobject), which means that, if you’re doing a lot of concatenations to (what looks like) “a single string”, you can avoid creating unnecessary objects — and repeatedly recopying earlier portions from one string to another — by using aStringBuilderinstead of aString. Usually the difference is not important. (Of course, “simple, clear code” is slightly contradictory: using+=is simpler, usingStringBuilderis clearer. But still, the decision should usually be based on code-writing considerations rather than minor performance considerations.)