C++ has a StringBuilder, it's called std::ostringstream, but the author didn't seem to know about it, so reinvented it.
To be polite, his reinvention is reasonable, and knowing about this problem is useful.
For example it may create a new StringBuilder in every iteration of a loop whereas you may be able to code it such that only a single StringBuilder needs to be created and you may be able to provide better initial array size hinting. If it's just a single concatenation statement, building a log message or something, then using the '+' operator won't have much if any impact on performance.
It's not even the JIT, it's a static transformation at byte code creation time. Last I checked:
String s = "foo" + "bar";
Produced identical byte code to: String s = new StringBuilder()
.append("foo")
.append("bar")
.toString();It is a very complex language, and that is definitely a mark against it, but the exact same thing could happen in Java or C# if people didn't know to use StringBuilder instead of relying on concatenating strings.