sexta-feira, 8 de fevereiro de 2013

String ou String Buffer? Qual usar?


String ou String Buffer? Qual usar?

  Isso vai depender do objetivo do seu algoritmo. Quando precisamos desenvolver algum método, que precise concatenar Strings (por exemplo), temos opções de usar a classe String ou a StringBuffer. No momento de desenvolver o método, você deve decidir qual das duas classes mais se adéqua ao seu algoritmo entendendo as diferenças entre elas, é claro. Então vamos às diferenças:

Classe String: cria um objeto na memória a cada concatenação.
Classe StringBuffer: cria somente um objeto na memória e, a cada concatenação, usa o objeto da memória e adiciona a nova string àquele objeto String da memória.

Logo, se você tiver um algoritmo que precise concatenar poucas strings, use a classe String. Caso contrário, use a StringBuffer. Abaixo alguns exemplos:

public class TesteString {

//DECLARAÇÃO DOS ATRIBUTOS COMO PÚBLICOS PARA USAR NO EXEMPLO. NÃO É A MELHOR PRÁTICA. USE-OS COMO PRIVADOS.

      public Integer id;
      public String nome;
      public Integer idade;

    1)  Exemplo de uso da classe String, concatenando apenas 3 variáveis.    

     public String toString() {
            return id + " " + nome + " " + idade;
      }
     
    2)  Já neste exemplo, foi usada a classe String Buffer devido às possibilidades de filtro.

      public String monteStringSql(Integer id, String nome, Integer idade){
            StringBuffer buffer = new StringBuffer();
            buffer.append("SELECT * FROM ALUNO WHERE 1=1 ");
            if (id != null )
                  buffer.append(" AND id = " + id.intValue());
           
            if (nome != null)
                  buffer.append(" AND nome = '" + nome + "'");
           
            if (idade != null)
                  buffer.append(" AND idade = " + idade.intValue());
           
            buffer.append(" ORDER BY nome");
           
            return buffer.toString();
      }
     
    3)  Execução de ambos os testes:

      public static void main(String[] args) {
            TesteString ts = new TesteString();
            ts.id = 1;
            ts.nome = "classe string";
            ts.idade = 30;
            System.out.println(":::: STRING ::::");
            System.out.println(ts.toString());
           
            System.out.println(":::: STRING BUFFER ::::");
            System.out.println(ts.monteStringSql(null, null, null));
            System.out.println(ts.monteStringSql(10, null, null));
            System.out.println(ts.monteStringSql(10, "TESTE", null));
            System.out.println(ts.monteStringSql(10, "TESTE", 35));
      }
}

RESULTADO:

:::: STRING ::::
1 classe string 30

:::: STRING BUFFER ::::
SELECT * FROM ALUNO WHERE 1=1  ORDER BY nome
SELECT * FROM ALUNO WHERE 1=1  AND id = 10 ORDER BY nome
SELECT * FROM ALUNO WHERE 1=1  AND id = 10 AND nome = 'TESTE' ORDER BY nome
SELECT * FROM ALUNO WHERE 1=1  AND id = 10 AND nome = 'TESTE' AND idade = 35 ORDER BY nome

OBSERVAÇÃO: Note que o número de atributos foi o mesmo, 3 em ambos os exemplos, porém o objetivo dos métodos foi diferente. No uso da classe string, apenas concatenei parâmetros da classe e, no segundo, a concatenação vai ocorrer apenas se o parâmetro tiver valor. Esse são exemplos clássicos de uso de ambas as classes.

Leitor, espero ter auxiliado no conhecimento dessas classes.

Um grande abraço e até a próxima!

Post enviado por:

Wallace Rodrigo do Nascimento
Desenvolvedor Java

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.