Qual é a diferença de String, StringBuilder e StringBuffer em Java

Essa foi uma pergunta que surgiu aqui na empresa…

E essa vai ser a resposta:

String é uma classe que define um objeto imutável, ou seja, que uma vez criado, o estado do objeto não pode ser mudado (isso significa que os valores que estão na classe nunca mais mudam…):

//Nova string
String str = new String(“Ola mundo!”);
//Concatena a String
str.concat(“Ola pessoal!”);
//Exibe o valor
System.out.println(str);

Se você perceber, o método concat devolve uma String com o valores concatenados, portanto, uma nova instância do objeto da classe String (ele não modificou o objeto atual…).

Agora, se fizermos isso com o StringBuffer ou com o StringBuilder:
//Novo objeto
StringBuffer buffer = new StringBuffer(“Ola mundo!”);
//Concatena a String
buffer.append(“Ola pessoal”);
//Exibe o valor
System.out.println(buffer);

Ele atualiza o estado do objeto!

Você deve perguntar: Qual é a vantagem disso?
As vantagens de atualizar o mesmo objeto:
– Não cria um novo objeto a cada atualização (economia de memória);
– É mais rápido (performático, como dizem alguns especialistas :P);

Mas então, a classe imutável não deve ser usada?
Deve sim, para coisas que, geralmente, não mudam (tipo: mensagens e constantes), pois classes mutáveis exigem mais da alocação e do gerenciamento de memória (ponteiros).

E qual é a diferença em StringBuilder e StringBuffer?
A primeira cria objetos não sincronizados e a segunda sincronizados. 😛

Não entendeu? Essa explicação fica para um próximo post!

Ah… só uma coisa: a partir do Java 5, não é preciso se preocupar com estas coisas, que qualquer instrução dessa:

String b = “a”;
int c = 2;
String a = b + “=” + c;

O compilador já otimiza para, mais ou menos, isso:

String b = “a”;
int c = 2;
StringBuilder a = new StringBuilder(b).append(“=”).append©;

Compilador inteligente, não? 😛

Até mais!

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do programador java.