A duvida é bastante simples e já esclareci bastante lendo outros topicos sobre
o assunto, que String são objetos imutáveis e são criadas novas instancias etc…
e que StrinBuilder é mais rapido que Buffer pq não é sincronizado etc…
Então, estou desenvolvendo uma app para um HandHeld HP iPaq, usando
J2SE, com MySaifu e Swing, está legal, mas to precisando tomar muito cuidado
com os objetos pra não estourar a memoria…
e um dos problemas está na exportação de um arquivo .txt no HH para o PC,
logo gostaria de saber se há diferença em fazer, por exemplo:
// Todos os métodos retornam leem atributos e retornam String;Strings=pessoa.getCodigo+";"+pessoa.getLeitura+";"+leitura.getAnoMes;// Ou fazer isso...StringBuildersb=newStringBuilder();sb.append(pessoa.getCodigo);sb.append(";");sb.append(pessoa.getLeitura);sb.append(";");sb.append(leitura.getAnoMes);
Considerando que são vários campos e já notei muita diferença ao NÃO usar o " += "
Então o que eu queria saber é se são criadas novas instancias de String ao concatenar
manualmente elas com + " " + " "
Ou seja, nesse caso em particular, dá na mesma, e use o código que seja mais claro para você.
Mas é claro que “+=” não se deve usar, dentro da medida do possível.
victorwss
dooda:
Buenas pessoal…
A duvida é bastante simples e já esclareci bastante lendo outros topicos sobre
o assunto, que String são objetos imutáveis e são criadas novas instancias etc…
e que StrinBuilder é mais rapido que Buffer pq não é sincronizado etc…
Então, estou desenvolvendo uma app para um HandHeld HP iPaq, usando
J2SE, com MySaifu e Swing, está legal, mas to precisando tomar muito cuidado
com os objetos pra não estourar a memoria…
e um dos problemas está na exportação de um arquivo .txt no HH para o PC,
logo gostaria de saber se há diferença em fazer, por exemplo:
// Todos os métodos retornam leem atributos e retornam String;Strings=pessoa.getCodigo+";"+pessoa.getLeitura+";"+leitura.getAnoMes;// Ou fazer isso...StringBuildersb=newStringBuilder();sb.append(pessoa.getCodigo);sb.append(";");sb.append(pessoa.getLeitura);sb.append(";");sb.append(leitura.getAnoMes);
Considerando que são vários campos e já notei muita diferença ao NÃO usar o " += "
Então o que eu queria saber é se são criadas novas instancias de String ao concatenar
manualmente elas com + " " + " "
Obrigado!!!
O compilador é inteligente e transforma o primeiro em algo bem parecido com o segundo.
// Isso:Strings=pessoa.getCodigo+";"+pessoa.getLeitura+";"+leitura.getAnoMes;// O compilador (java 1.5 ou maior) transforma em:Strings=newStringBuilder(pessoa.getCodigo).append(";").append(pessoa.getLeitura).append(";").append(leitura.getAnoMes).toString();// Compiladores java 1.4 ou menores usam StringBuffer ao invés de StringBuilder.
EDIT: Putz, não dá para ser mais rápido que o thingol…
dooda
Pois é pessoal…
realmente eu só notei dieferença extrema ao usar o +=
nas duas outras maneiras, teve a mesma performance…
Obrigado!!!
sergiotaborda
Uma coisa que ainda dá para melhorar é usar char em vez de string para o ponto-e-virgula
Não é muito mas elimina essa string do pool.
aproveite tb a interface fluente do stringbuilder para escrever menos.
T
thingol
Quando preciso concatenar diversas variáveis string, usualmente é porque eu preciso efetuar um log, ou coisa parecida (SQL deve ser feito com PreparedStatement, e não se fala mais nisso).
Nesse caso, acaba-se precisando também de formatação adequada, e eu uso o velho e bom String.format (que é a forma disfarçada do printf). É mais lento que concatenar as strings com StringBuilder.append, concordo, mas acho mais flexível.
dooda
pois é Sergio…
nesse dispositivo, onde os recursos são bem limitados…
qualquer Char, pode fazer a diferença…
Mas agora a usabilidade x performance está bem legal…
é meu primeiro projeto nessa plataforma…
estou usando MySaifu + Swing + HSQLDB…
no HandHeld HP iPaq hx2400, e está rodando blz, numa app
para leituras de energia eletrica a campo…
Vallew pela força ae pessoal…
dooda
thignol, este meu arquivo .txt devia sair formatado tambem com numericos com zeros a direita
etc…
na minha situação, sem chances de usar… ficou super lento a exportação formatando os valores…
e acho que não tinha nada demais nisso
returnString.format("%012d",aNumber);
sei lá, por isso usei o “;”
T
thingol
No seu caso, String.format é realmente lento se você usá-lo como um encapsulamento. Você tem de usá-lo dessa forma:
ou melhor ainda, você nem cria diretamente uma string; você já pega seu arquivo de saída, e o encapsula em um PrintWriter. Como essa classe tem o método printf, você pode usá-lo mais ou menos como: