Toda String em java é imutável ela nasce com um tamanho e morre com ele isso é fato
o que acontece que quando você faz qualquer operação entre Strings, não importa qual seja (subString, StringA + StringB, conctenação, append) o que for o que o java faz é criar uma nova String em cima da String antiga
exemplo :
String a = "ola";
String b = "Mundo";
a = a + b;
nesse exemplo de cima a String “ola” original morre ela vai deixar de existir, e no lugar dela vira a String “olaMundo” substituindo o seu lugar
tenha muito cuidado ao fazer operações com String em java isso pode deixar a sua aplicação muito lento, eu lembro que uma vez fiz um programa que demorava 10 min para rodar o motivo dessa demora era por causa das inúmeras concatenações que minha String fazia.
Já ao usar o StringBuilder ele é uma String que o tamanho pode variar, assim concatenar Strings com ele não é um processo pesado, para você ter ideia essa minha aplicação que levava 10 min para rodar ao usar StringBuilder ela passou a levar 30 segundos
so usando o seu exemplo :
String x = "Andre L";
x = x.replaceAll("L","?");
quando você faz “x.replaceAll(“L”,”?");" você está gerando uma nova String diferente da original também e substituindo
[quote=Victor Gerin]Toda String em java é imutável ela nasce com um tamanho e morre com ele isso é fato
o que acontece que quando você faz qualquer operação entre Strings, não importa qual seja (subString, StringA + StringB, conctenação, append) o que for o que o java faz é criar uma nova String em cima da String antiga
exemplo :
String a = "ola";
String b = "Mundo";
a = a + b;
nesse exemplo de cima a String “ola” original morre ela vai deixar de existir, e no lugar dela vira a String “olaMundo” substituindo o seu lugar
tenha muito cuidado ao fazer operações com String em java isso pode deixar a sua aplicação muito lento, eu lembro que uma vez fiz um programa que demorava 10 min para rodar o motivo dessa demora era por causa das inúmeras concatenações que minha String fazia.
Já ao usar o StringBuilder ele é uma String que o tamanho pode variar, assim concatenar Strings com ele não é um processo pesado, para você ter ideia essa minha aplicação que levava 10 min para rodar ao usar StringBuilder ela passou a levar 30 segundos[/quote]
Ah!!! Saquei! Muito Obrigado…
Entao StringBuilder é mais rapido do que concatenar com + ?
Aproposito não esqueça de colocar “[Resolvido]” alem também que tags como “[Duvida]” não é necessário ao posta aqui já sub entende-se que você tem uma dúvida xD
[quote=Victor Gerin]Toda String em java é imutável ela nasce com um tamanho e morre com ele isso é fato
o que acontece que quando você faz qualquer operação entre Strings, não importa qual seja (subString, StringA + StringB, conctenação, append) o que for o que o java faz é criar uma nova String em cima da String antiga
exemplo :
String a = "ola";
String b = "Mundo";
a = a + b;
nesse exemplo de cima a String “ola” original morre ela vai deixar de existir, e no lugar dela vira a String “olaMundo” substituindo o seu lugar
[/quote]
Não exatamente.
Os objetos continuam existindo até que o GarbageCollector faça seu trabalho. Isso pode ser no exato instante posterior à perda de referência (quando a + b é atribuído ao objeto a) ou após algum tempo.
É por isso que temos que ter cuidado com a manipulação de Strings em java.
Por outro lado, você pode usar String, concatenando com o operador ‘+’ sem problemas, só precisa ver se a quantidade de concatenações não é muito grande. Caso seja, prefira utilizar StringBuilder.
Muito bom o StringBuilder! Realizei uns testes e é muito superior! String “normal” deu erro ou dava uma travada enorme nos testes, já o StringBuilder mostrou uma eficiência incrível!