Не верьте тому, что вы «знаете» о строках. Вы можете просмотреть исходный код для реализации строки. Например, ваш пример:
string s = "goodbye " + "cruel world!";
В java выделил бы одну строку. Java играет довольно милые трюки, и их будет сложно перехитрить - просто никогда не оптимизируйте, пока вам не понадобится!
В настоящее время, однако, насколько я знаю, используя это:
String s="";
for(int i=0;i<1000;i++)
s+=" ";
для создания строки из 1000 пробелов все еще имеет тенденцию быть крайне неэффективным
Добавление в цикл довольно плохо, но в остальном это, вероятно, так же эффективно, как StringBuilder.