[RESOLVIDO] String, StringBuffer?

Vi pelo fórum algumas recomendações de evitar de se usar String quando você precisar fazer alguma modificação nela.
Alguém saberia me explicar o porque exatamente disso ? (de evitar usar objString = "nome " + ": " por exemplo)
Quando é mais recomendado usar cada ?

Supondo que eu tenha um método que seria muito chamado com parâmetros String … Param1, Param2, Param3 e retornaria uma String com “Param1 ? Param2 : Param3”.
Seria melhor criar um StringBuffer e usar vários append nesse caso ?
Algo como:

[code]public String metodoQualquer(String param1, String param2, String param3) {

	StringBuffer stringFinal = new StringBuffer(param1);
	stringFinal.append("?");
	stringFinal.append(param2);
	stringFinal.append(":");
	stringFinal.append(param3);

	return stringFinal.toString();

} // metodoQualquer[/code]

E se ele fosse chamado só uma única vez quando o processo é executado, não teria problema em usar algo como return Param1 + “?” + Param2 + “:” + Param3; ?

Eu, pelo menos, acho que não vale a pena utilizar StringBuilder ou StringBuffer para realizar funções pequenas como a sua.

Ao meu ver, StringBuilder é mais apropriado para realizar um grande numero de concatenações com, por exemplo, ao escrever um xml.

Não é bem “minha função”. Como disse foi apenas um exemplo. E exatamente por ser pequeno eu espefiquei “em um caso que esse método seria chamado muitas vezes”.
Meu ponto é saber melhor as desvantagens de se usar String e vantagens do StringBuffer (ou outra classe do tipo).

O principal motivo é String são inalteraveis… Cada vez que você concatena, você na verdade está criando uma nova String,
e trocando a referência, e perdendo o valor anterior…

Leia esse texto, que tudo vai ficar mais claro!
http://imasters.uol.com.br/artigo/7131/java/entendendo_as_classes_string_stringbuilder_e_stringbuffer/

E, geralmente, é melhor usar o StringBuilder (que não é sincronizado) ao invés do StringBuffer.

Lembre-se também que o StringBuilder usa invocation channing, o que te permite fazer isso aqui:

String stringFinal = new StringBuffer(param1).append("?").append(param2).append(":").append(param3).toString();

Acho que a questão aqui é: É eficiente utilizar StringBuilder para pequenas operações?

Não muito mais eficiente do que usar String direto, a menos que você esteja chamando isso num loop.

Também é bom lembrar que a concatenação de constantes é mais eficiente usando + do que StringBuilder. Isso pq o Java é capaz de simplesmente eliminar essa concatenação já na compilação.

Exemplo:

private static final String nome = “Vinicius”;

String x = nome + " Godoy" + " de Mendonça";

Depois de compilado vira:
String x = “Vinícius Godoy de Mendonça”;

As respostas ajudaram bastante =D obrigado a todos. Vou levar em conta o que aprendi aqui daqui pra frente hehe