Hoje vou mostrar a diferença entre as classes String, StringBuffer e StringBuilder.
Porque não usar String?
Toda vez que você faz uma concatenação de strings, você está alocando um novo objeto na memória, imagine isso em um laço de repetição.
Por isso que criaram a classe StringBuffer e StringBuilder.
Com StringBuffer sendo instanciada uma vez, você pode utilizar .append() e assim sempre utilizando o mesmo objeto da memória, com a StringBuilder é igual, porem somente a StringBuffer é synchronized.
Testando esse código você verá por que! :D
int val = 100000;
//É sincronizada, utiliza o mesmo objeto.
StringBuffer sb = new StringBuffer();
long time = System.currentTimeMillis();
for (int i = 0; i < val; i++) {
sb.append("a");
//System.out.println(sb.toString());
}
System.out.println("StringBuffer tempo total da Excecução: " + (System.currentTimeMillis() - time) + "ms");
//Não é sincronizada, utiliza o mesmo objeto.
StringBuilder sb2 = new StringBuilder();
time = System.currentTimeMillis();
for (int i = 0; i < val; i++) {
sb2.append("a");
//System.out.println(sb2.toString());
}
System.out.println("StringBuilder tempo total da Excecução: " + (System.currentTimeMillis() - time) + "ms");
//Cria diversos objetos para cada concatenação.
String s = "";
time = System.currentTimeMillis();
for (int i = 0; i < val; i++) {
s += "a";
//System.out.println(s);
}
System.out.println("Tempo total de Excecução da concatenação de strings: " + (System.currentTimeMillis() - time) + "ms");
T+
Leandro kersting
Um comentário:
ta na hora de atualizar esse teu blog! heheh
abraço
Postar um comentário