| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 08:46:14
|
velo
GUJ Ranger
![[Avatar]](/images/avatar/32b991e5d77ad140559ffb95522992d0.jpg)
Membro desde: 19/02/2004 18:23:55
Mensagens: 797
Localização: Jaraguá do Sul - SC
Offline
|
Opa pessoal,
Uma dúvida, porque usar o StringBuffer?
Eu poderia fazer com o string dando um +=, mas vejo que o pessoal procura usar o StringBuffer.
Eu uso o StringBuffer, mas não sei o porque.
VELO
This message was edited 1 time. Last update was at 19/07/2005 08:46:42
|
Use o melhor:
Linux para servidores
Macintosh para gráficos
Palm para mobilidade
Windows para jogar paciência
SCJP 5 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 08:54:46
|
andre_a_s
GUJ Ranger
![[Avatar]](/images/avatar/3328bdf9a4b9504b9398284244fe97c2.jpg)
Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline
|
Isso é errado.
Fazendo assim, vc cria 3 espaços em memória, usando StringBuffer vc só usa um.
Concatenação é sempre mais "pesado"
Assim vc só usou um espaço em memória
|
Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 09:30:48
|
Java Vinicius Machine
JavaEvangelist
![[Avatar]](/images/avatar/22f2729737ae3dc9702e4cee0eb3e900.png)
Membro desde: 03/12/2004 12:56:35
Mensagens: 484
Offline
|
andre_a_s wrote:[code]
Isso é errado.
Fazendo assim, vc cria 3 espaços em memória, usando StringBuffer vc só usa um.
Concatenação é sempre mais "pesado"
Assim vc só usou um espaço em memória 
Ou seja, simplismente por questão de desempenho e boa prática.
This message was edited 1 time. Last update was at 19/07/2005 09:31:46
|
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Fowler)
Sun Certified Programmer for the Java Platform 1.4
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 09:36:14
|
schuelter
Entusiasta Java
![[Avatar]](/images/avatar/6a83c731660fcc9f14e1ce0b62d45eb9.jpg)
Membro desde: 11/07/2005 11:37:57
Mensagens: 17
Localização: Blumenau - SC
Offline
|
para ajudar na explicação. String é um tipo de dado IMUTÁVEL. ou seja, ele NUNCA muda. Para vc concatenar uma String a VM tem que criar uma segunda String para criar uma terceira(o resultado). Vamos ver um código para vc entender melhor
Usar StringBuffer é beeem mais rápido para concatenar grandes quantidades de String. faça um teste. coloque um for de 1milhão concatenando String com += e depois faça o mesmo usando StringBuffer
|
[]´s
Marcos A. Schuelter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 09:53:14
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
Para se convencer, rode isso aqui:
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 10:24:01
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Lembro que ao usar a atual versão do Java (5.0), se não for necessário ter sincronização nas threads, isto é, quando as Strings forem usadas em uma única thread de cada vez, se deve usar StringBuilder.
StringBuilder tem os mesmos métodos de StringBuffer mas não é sincronizada.
[]s
Luca
This message was edited 1 time. Last update was at 19/07/2005 10:58:25
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 10:26:54
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
loop = 10000;
Tempo total de excecucao com StringBuffer: 0ms.
Tempo total de excecucao concatenando Strings: 903ms.
Com loop = 50000 estou esperando o String até agora. O StringBuffer deu míseros 10ms.
<editado>
Opsss... terminou:
Tempo total de excecucao com StringBuffer: 10ms.
Tempo total de excecucao concatenando Strings: 62950ms.
</editado>
This message was edited 1 time. Last update was at 19/07/2005 10:27:23
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 10:57:16
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O .NET Framework nesse ponto é igualzinho ao Java. Você tem a classe System.String (= java.lang.String) e a classe System.Text.StringBuilder (= java.lang.StringBuilder).
O comportamento é igualzinho, assim como a recomendação de usar StringBuffer (StringBuilder) sempre que possível. Não cheguei a ver o que o csc (compilador C#) gera para uma concatenação de strings com "+" ou "+=", mas deve ser algo parecido com o que o Java faz (criar um objeto StringBuffer ou StringBuilder "por debaixo dos panos".)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 13:35:34
|
velo
GUJ Ranger
![[Avatar]](/images/avatar/32b991e5d77ad140559ffb95522992d0.jpg)
Membro desde: 19/02/2004 18:23:55
Mensagens: 797
Localização: Jaraguá do Sul - SC
Offline
|
Beleza pessoal, valeu pela ajuda.
VELO
|
Use o melhor:
Linux para servidores
Macintosh para gráficos
Palm para mobilidade
Windows para jogar paciência
SCJP 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/07/2005 19:53:08
|
velo
GUJ Ranger
![[Avatar]](/images/avatar/32b991e5d77ad140559ffb95522992d0.jpg)
Membro desde: 19/02/2004 18:23:55
Mensagens: 797
Localização: Jaraguá do Sul - SC
Offline
|
Luca wrote:Olá
Lembro que ao usar a atual versão do Java (5.0), se não for necessário ter sincronização nas threads, isto é, quando as Strings forem usadas em uma única thread de cada vez, se deve usar StringBuilder.
StringBuilder tem os mesmos métodos de StringBuffer mas não é sincronizada.
[]s
Luca
Testei esse cara.... ele é exatamente o q vc falou, um xerox do StringBuffer mas sem a sincronização...
O StringBuilder realmente é um pouco mais rápido.
Tempo total de excecução com StringBuilder: 593ms.
Tempo total de excecução com StringBuffer: 625ms.
Para um loop de 5000000
A diferença, na minha opinião, não justifica a criação do StringBuilder, q 6 axam?
VELO
|
Use o melhor:
Linux para servidores
Macintosh para gráficos
Palm para mobilidade
Windows para jogar paciência
SCJP 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 14:31:12
|
marcelo.santos
Smalltalk
![[Avatar]](/images/avatar/16fa2b0294e410b2551c3bf6965c0853.jpg)
Membro desde: 29/04/2006 14:28:25
Mensagens: 1
Offline
|
Sou iniciante em java e gostaria de saber como eu faço pra excluir o conteúdo de uma StringBuffer
velo wrote:
Luca wrote:Olá
Lembro que ao usar a atual versão do Java (5.0), se não for necessário ter sincronização nas threads, isto é, quando as Strings forem usadas em uma única thread de cada vez, se deve usar StringBuilder.
StringBuilder tem os mesmos métodos de StringBuffer mas não é sincronizada.
[]s
Luca
Testei esse cara.... ele é exatamente o q vc falou, um xerox do StringBuffer mas sem a sincronização...
O StringBuilder realmente é um pouco mais rápido.
Tempo total de excecução com StringBuilder: 593ms.
Tempo total de excecução com StringBuffer: 625ms.
Para um loop de 5000000
A diferença, na minha opinião, não justifica a criação do StringBuilder, q 6 axam?
VELO
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/04/2006 19:58:07
|
danieldestro
Moderador
![[Avatar]](/images/avatar/a5bfc9e07964f8dddeb95fc584cd965d.png)
Membro desde: 04/09/2002 17:26:16
Mensagens: 6667
Localização: São Paulo / Catanduva
Offline
|
Dá uma olhada na documentação:
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/StringBuffer.html#delete(int,%20int)
|
gotjava?
Doe sangue
What You See Is What You Get!
Apostilas de Java grátis!
RefsCALL - Bandeira Eletrônica para Árbitro de Futebol |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/11/2007 01:24:05
|
magogs
What is classpath?
Membro desde: 21/10/2007 01:00:28
Mensagens: 5
Offline
|
Aproveitando a discussao, o StringBuffer possui algum método q faca o mesmo q o split() ? q eu possa separar a String em substrings a partir de um delimitador?
nao encontrei nada do tipo e getRequestURL() só aceita StringBuffer, acabando com minha implementacao com o split().
Desde já obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/11/2007 09:46:33
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
outra questao é evitar objetos perdido.. usando StringBuilder/Buffer. E isso é um conceito tb fundamental, além da questao do tempo de execucao que foi citada .
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/04/2008 12:33:25
|
blackfalcon
JavaEvangelist
![[Avatar]](/images/avatar/67cba9ae9e4555079d1751ea3d187147.jpg)
Membro desde: 01/04/2008 21:08:28
Mensagens: 347
Offline
|
Filipe Sabella wrote:Para se convencer, rode isso aqui:
Ola, tentei executar esse codigo e deu o seguinte erro:
O que aconteceu? O que eu fiz de errado?
|
|
|
 |
|
|