StringBuffer  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
velo
GUJ Ranger
[Avatar]

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
[Email] [MSN] [ICQ]
andre_a_s
GUJ Ranger
[Avatar]

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
[Email] [MSN] [ICQ]
Java Vinicius Machine
JavaEvangelist
[Avatar]

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
schuelter
Entusiasta Java
[Avatar]

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
[MSN]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

Para se convencer, rode isso aqui:

Former LIPE.
[ICQ]
Luca
Moderador
[Avatar]

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/
[Email] [WWW]
danieldestro
Moderador
[Avatar]

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
[WWW]
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".)

[WWW]
velo
GUJ Ranger
[Avatar]

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
[Email] [MSN] [ICQ]
velo
GUJ Ranger
[Avatar]

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
[Email] [MSN] [ICQ]
marcelo.santos
Smalltalk
[Avatar]

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
danieldestro
Moderador
[Avatar]

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
[WWW]
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.
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/
[WWW]
blackfalcon
JavaEvangelist
[Avatar]

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?
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team