Qual a diferença de String e StringBuilder?

2 respostas
0

Ola Pessoal!!!

Alguem sabe me dizer qual é a diferença entre a a classe String e StringBuilder?

Quando usar StringBuilder?

Desde ja agradeço

2 Respostas

Edifran

StringBuilder.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html

String.

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

ViniGodoy

O String é um objeto imutável. Isso significa que você não pode alterar o seu valor, a menos que crie um outro objeto da classe. Construir e destruir objetos é uma operação relativamente lenta.

String x = "Vinícius"; //Cria uma String com o conteúdo "Vinícius". Ao fazer: x += " Godoy";

O que vai ocorrer é que, uma nova string será criada, com o conteúdo “Vinícius Godoy” e essa String irá substituir a String “Vinícius” previamente criada.

Com o StringBuilder isso não acontece. Ao fazer:

StringBuilder sb = new StringBuilder("Vinícius"); sb.append(" Godoy");

O conteúdo " Godoy" é simplesmente acrescentado ao objeto sb já existente. Isso pode representar uma diferença significativa de performance, se essas concatenações ocorrerem dentro de um loop.

Por outro lado, é seguro retornar Strings dessa forma:

public class Usuario { private String nome; public String getNome() { return nome; } }

E não seria fazer isso com StringBuilder. Afinal, se fosse feito com StringBuilder, seu usuário poderia fazer isso aqui:

usuario.getNome().append("Ha! Pegadinha do malandro");

E alterar o nome sem usar o set.

Note que com string, mesmo que seu usuário faça:

usuario.getNome().concat("Xiii, falhou");

O que vai acontecer é que o método concat irá retornar uma nova string, com o conteúdo concatenado, sem alterar o valor da string nome original.

Classes imutáveis também são naturalmente thread-safe. Para entender melhor os benefícios e malefícios de se ter ou não uma classe imutável, dá uma lida nesse artigo do Goetz:

Criado 24 de outubro de 2008
Ultima resposta 24 de out. de 2008
Respostas 2
Participantes 3