Qual a diferenca entre concat() e append() ? Quando usar um ou outro?

9 respostas
douglasmorais
for (String nameParameter : parameterNames) {   
         sql.append(request.getParameter(nameParameter)).append(",");   
    }   
    System.out.println(sql.toString().substring(0, (sql.toString().length()-1)).concat(" from tabela"));

nesse trecho de codigo, nao entendi pq nao foi colocado append no lugar do concat

9 Respostas

douglasmorais

Acho que entendi.

O append() eh metodo da classe StringBuilder.
E o concat() eh metodo da classe String.
Na hora do println a sql vira string novamente, dai, se quiser somar outro pedaco de string tem que usar o concat().

Eh isso mesmo ?

ViniGodoy

Isso. E o ideal é nunca concatenar Strings dentro de whiles.
Use apenas o append do StringBuilder.

M

String é um objeto imutável. Quando você chama o método concat, uma nova String é criada (e isso é muito lento se comparado ao StringBuilder).

StringBuilder serve justamente para concatenar dados (Strings, números, etc.) de uma forma rápida. O método dessa classe que faz isso é o append.

Quando você executa o System.out.println passando um objeto como parâmetro, ele automaticamente chama o método toString dele. Na prática, as duas linhas abaixo são equivalentes:

System.out.println(seuStringBuilder);
System.out.println(seuStringBuilder.toString);

No seu código, você cria um StringBuilder, converte ele para String, chama o método substring, converte o StringBuilder para String de novo (para resgatar o tamanho) e chama o método concat de String (que é lento). Seu código não está tão otimizado quanto poderia estar.

drsmachado

Na prática, a segunda linha lançará exception, pois métodos são chamados com os () ao final e os parâmetros requeridos entre eles.

douglasmorais

Grande Viny

Sempre acudindo os pobres e oprimidos… rs

Valeu cara

M

drsmachado:
marcobiscaro2112:

Na prática, as duas linhas abaixo são equivalentes:

System.out.println(seuStringBuilder);
System.out.println(seuStringBuilder.toString);


Na prática, a segunda linha lançará exception, pois métodos são chamados com os () ao final e os parâmetros requeridos entre eles.

Sim, esqueci dos parênteses na chamada do método, mas você entendeu a ideia.

M

Alguns detalhes que podem ajudar:

A classe StringBuilder tem os métodos length() e deleteCharAt(int index) que podem ser usados para remover o último caractere.

Assim você pode fazer outro append com o nome da tabela e só converter para String quando não for fazer mais nenhuma modificação.

douglasmorais

[b]Valeu

drsmachado

marcobiscaro2112:
drsmachado:
marcobiscaro2112:

Na prática, as duas linhas abaixo são equivalentes:

System.out.println(seuStringBuilder);
System.out.println(seuStringBuilder.toString);


Na prática, a segunda linha lançará exception, pois métodos são chamados com os () ao final e os parâmetros requeridos entre eles.

Sim, esqueci dos parênteses na chamada do método, mas você entendeu a ideia.

Com certeza, só estava fazendo meu papel de ser chato.

Criado 15 de outubro de 2011
Ultima resposta 16 de out. de 2011
Respostas 9
Participantes 4