Ola Pessoal!!!
Alguem sabe me dizer qual é a diferença entre a a classe String e StringBuilder?
Quando usar StringBuilder?
Desde ja agradeço
Ola Pessoal!!!
Alguem sabe me dizer qual é a diferença entre a a classe String e StringBuilder?
Quando usar StringBuilder?
Desde ja agradeço
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: