| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 16:44:20
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Alguém sabe a diferença entre StringBuffer e StringBuilder?
Obrigado,
Nadilson
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 16:47:31
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline
|
Javadoc StringBuilder wrote:A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
Javadoc StringBuffer wrote:Every string buffer has a capacity. As long as the length of the character sequence contained in the string buffer does not exceed the capacity, it is not necessary to allocate a new internal buffer array. If the internal buffer overflows, it is automatically made larger. As of release JDK 5, this class has been supplemented with an equivalent class designed for use by a single thread, StringBuilder. The StringBuilder class should generally be used in preference to this one, as it supports all of the same operations but it is faster, as it performs no synchronization.
Até!
|
----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)
"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 16:49:02
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
StringBuffer é synchronized
StringBuilder não é ...
ou seja, StringBuilder tende a ser bem mais rápido
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 17:34:23
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
A busca no próprio forum as vezes ajuda :
http://www.guj.com.br/posts/list/48531.java
Eu também duvido que a performance das duas seja assim tão diferente.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 17:55:24
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
na verdade é uma diferença consideravel sim ...
por exemplo, olha este teste:
o output dele é:
3373
2951
ou seja, a diferença é de praticamente 14% só neste caso com inteiros, e pode aumentar dependendo da forma como for utilizada ...
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 18:31:06
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Primeiro, cuidado com o microbenchmark.
Em segundo lugar, mesmo o seu benchmark indica que em 10000000 concatenações, você teve 1 segundo de tempo a mais. Ok, são 14%, mas ambas as classes são rápidas o suficiente para que, na absoluta maioria das vezes, isso não seja perceptível ao usuário final.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 18:35:01
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Só um comentário.
Inverti o Buffer e o Builder e fiz um segundo teste... A diferença caiu muito.
Creio que na primeira execução o Java gere algum tipo de buffer, que beneficia quem roda em segundo lugar.
Por isso novamente: cuidado com o microbenchmark.
Ainda assim, eu usaria o StringBuilder no lugar do Buffer. Não só pelo fato de ser mais rápido, mas também por não criar estruturas necessárias para a exclusão mútua entre as Threads. Fora que, via de regra, você não precisa de uma classe ThreadSafe.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 19:02:08
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
extranho, eu inverti aqui e tive exatamente o mesmo resultado ...
mas tudo bem, foi só um exemplo ...
e se tu quer tanto cuidado com o microbenchmark ...
então adiciona um outro loop igual mas com concatenação de strings e fica esperando ele terminar
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 19:23:12
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Concatenação de string sim, dá uma diferença realmente consideravel.
Agora, quanto a sincronização, dá uma lida aqui. :
http://www-128.ibm.com/developerworks/java/library/j-jtp04223.html?ca=dgr-lnxw07-obg-JavaMyths
E sobre benchmark (muito do que diz aqui vale para esse caso):
http://www-128.ibm.com/developerworks/java/library/j-jtp02225.html
Ah sim, note que eu não disse que não era mais lento. Isso é... mas só que a diferença não será perceptível, na maior parte das vezes (como no caso da concatenação).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2007 23:06:46
|
lavh
GUJ Master
Membro desde: 30/07/2006 16:09:55
Mensagens: 1311
Offline
|
Pow...muito legal seus posts Vini! Foram muito bons para desmistificar alguns mitos! Esses artigos da IBM são bem legais.
Parabéns
Abraços!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/01/2007 10:12:28
|
nadilsons
JavaGuru
![[Avatar]](/images/avatar/0676f43ba89ef089f43c6f36ca40fa4a.png)
Membro desde: 25/09/2006 23:10:20
Mensagens: 222
Offline
|
Muito obrigado por todas as respostas.
|
Jesus é o caminho, a verdade e a vida!
Reflection DSL - http://code.google.com/p/reflection-dsl |
|
|
 |
|
|