[RESOLVIDO] String, StringBuffer?

7 respostas
CrOnNoS

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:
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

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; ?

7 Respostas

Mikhas

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.

CrOnNoS

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).

G

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/

ViniGodoy

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();
Mikhas

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

ViniGodoy

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”;

CrOnNoS

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

Criado 14 de agosto de 2009
Ultima resposta 15 de ago. de 2009
Respostas 7
Participantes 4