Ainda há salvação para o operador "+"?
Apesar da má impressão e da péssima imagem criada, o operador de concatenação não afeta a performance sempre que utilizado. Veja:
1. Strings com várias linhas
String text=
"Hello\n"+
"World\n"+
"Again";
Neste caso, pode-se inserir vários blocos de texto concatenados. O compilador cria um único objeto String e a concatenação ocorre em tempo de execução.
2.Mensagens curtas
System.out.println("x = "+x+ " y = "+y);
Como o compilador age:
System.out.println((new StringBuilder())
.append("x = ").append(x).append(" y = ").append(y)
.toString());
O compilador não gera vários String. Útil para economizar codificação.
Agora, para aqueles interessados nos bytecodes: De acordo com o tópico publicado em http://kaioa.com/node/59, para concatenação de dois ou três operandos, utiliza-se o operador "+"; para quatro ou mais, dê preferencia para StringBuffer. Quem diria... um simples "+" pode gerar tanta polêmica quanto discutir uma linguagem apropriada para construir uma aplicação! Com o encapsulamento, os detalhes por vezes nos escapam e com um leque de opções disponíveis poucas vezes temos a curiosidade de saber as peculiaridades de cada uma.
Para aplicações corriqueiras ou de criticidade pequena, pode ser algo bobo com o que se preocupar. Mas vejamos um exemplo básico e não tão distante: Programação para dispositivos móveis. Os dispositivos móveis possuem quantidade de memória limitada e poder de processamento baixo se comparado à desktops, por exemplo. Um prato cheio. E limitado. Neste caso, a forma como se concatenam as possíveis strings de seu aplicativo pode fazer uma diferença significativa em um ambiente tão limitado. Uma pesquisa a mais pode trazer grandes benefícios à suas aplicações, bem como conhecimento. Fica aí a dica.
Referências
StringBuilder vs StringBuffer vs String.concat - done right.
StringBuffer versus String.