| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2002 00:59:40
|
EddiE
Virtual Machine Man
Membro desde: 31/08/2002 09:05:07
Mensagens: 647
Localização: São Paulo - SP
Offline
|
Ao trabalhar com um objeto StringBuffer posso fazer a seguinte concatenação
StringBuffer sb = new StringBuffer("Nome:" +variavel_Nome+ "Endereco:" +variavel_Endereco);
que a compilação não gera nenhum erro. Internamente isto consome muita memória? O Java interpreta como append() o sinal de +?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2002 10:34:17
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
A Virtual Machine ira criar cerca de 5 objetos de tipo String sem contar os que ja tinham sido criados (variavel_Nome e variavel_Endereco) que nao tenho certeza se sao Strings ou nao (podem ser int's ou outros objetos quaisquer).
Uma vez que seu objetivo eh usar a classe StringBuffer entao eh mais rapido utilizar o seguinte codigo:
Fazendo o teste com o seu codigo e com o meu, variavel_Nome=new String("Guilherme"), variavel_Endereco=new String("Carl-diem Strasse 33"), para um loop de 5.000.000 vezes tenho o resultado abaixo. (TODAS as variaveis sao criadas com NEW dentro do codigo do for)
Seu codigo: 11173 msecs
Meu codigo: 8468 msecs
Isso significa que eh claro que seu codigo ira rodar extremamente rapido, uma vez que ele cria soh 5 objetos. Porem o codigo que mostrei ira rodar ainda mais rapido, e numa aplicacao onde o trabalho com Strings eh enorme pode ser MUITO mais aconselhavel o segundo metodo (20% mais rapido).
Espero ter ajudado..
Guilherme Silveira
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2002 13:04:55
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Apenas complementando a explicação do Guilherme, quando você concatena alguma String usando o operador +, o Java cria uma instância da classe StringBuffer com o conteúdo a ser concatenado, aplica o método append() e então retorna usando o método toString().
Em termos de código, seria mais ou menos assim:
nesse exemplo o que aconte é o seguinte: um objeto do tipo String é criado na memória, com uma referência à string "Parte 1" apontando para tal objeto, e consecutivamente ( em cada nova concatenação ) é criado um novo objeto do tipo String. As chamadas a concatenação são ser traduziadas da seguinte forma:
Logicamente isso não é nada otimizado. Por isso que fazer
é o recomendável, já que não são criados vários objetos String desnecessariamente. Uma dica simples para se lembrar desse detalhe é a seguinte: o tipo String em Java é imutável, você não consegue alterar o valor de uma variável String sem criar um objeto novo. StringBuffer É mutável. Portanto, se você precisa, em algum momento alterar o conteúdo da string, utilize StringBuffer, caso contrário utlilize String.
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
|
|