A importância de uso do StringBuilder

Estou realizando a correção de vários apontamentos feitos pelo Sonar no projeto da empresa onde eu trabalho.

Um desses apontamentos foi a substituição de concatenação de Strings para StringBuilder. Lembro de ter visto isso no curso da Academia Java, mas não lembrava da importância dessa alteração. Vejamos o exemplo:

import java.util.Date;

public class Main {

    public static void main(String[] args) {

        String string = "";
        Date dtInicialString = new Date();
        for (int i = 0; i < 40000; i++) {
            string += +i + ";";
        }
        Long resultado = (new Date().getTime() - dtInicialString.getTime());
        System.out.println("String: " + resultado + " milisegundos");
        System.out.println("-------------------------------------------");

        StringBuilder stringBuilder = new StringBuilder();
        Date dtInicialBuilder = new Date();
        for (int i = 0; i < 40000; i++) {
            stringBuilder.append(i).append(";");
        }
        Long resultadoBuilder = (new Date().getTime() - dtInicialBuilder.getTime());
        System.out.println("StringBuilder: " + resultadoBuilder + " milisegundos");
        System.out.println("-------------------------------------------");

        StringBuffer stringBuffer = new StringBuffer();
        Date dtInicialBuffer = new Date();
        for (int i = 0; i < 40000; i++) {
            stringBuffer.append(i).append(";");
        }
        Long resultadoBuffer = (new Date().getTime() - dtInicialBuffer.getTime());
        System.out.println("StringBuffer: " + resultadoBuffer + " milisegundos");
        System.out.println("-------------------------------------------");

    }

}

Saída no console:

String: 12913 milisegundos
-------------------------------------------
StringBuilder: 6 milisegundos
-------------------------------------------
StringBuffer: 22 milisegundos
-------------------------------------------

A diferença é gritante no desempenho. Isso ocorre pois ao concatenar strings com o + é criado um novo objeto a cada iteração, ficando então objetos perdidos na memória.

Já a diferença entre StringBuffer e StringBuilder é que o primeiro os métodos são sincronizados, tornando então o processo mais lento.

Por hoje era isso, até mais 😀

Deixe uma resposta