Olá pessoal,
tenho a seguinte dúvida:
em um código onde não se faça uso de threads, os desempenhos das classes StringBuffer e StringBuilder serão exatamente os mesmos?
Aguardo respostas. Valew!
Sim a única diferença entre elas é que a StringBuilder possui todos os métodos synchronizados, o que pode acasionar um bloqueio. Se você não fizer uso de threads, não haverá bloqueio, então não faz diferença!
Qualquer coisa sincronizada é muito mais lenta que uma não sincronizada, assim sendo, StringBuilder em um ambiente “single-thread” é muito mais rápido que StringBuffer e sempre recomendado nesse caso.
hmmm antes de responder eu fiz um teste aqui pra não falar nada errado…
public static void main(String[] args) {
StringBuffer b = new StringBuffer("");
//StringBuilder b = new StringBuilder("");
long i = System.currentTimeMillis();
for( int q = 0; q < 10000; q++ ) {
b.append("a");
}
long f = System.currentTimeMillis();
System.out.println("Time: " + (f - i));
}
Engraçado que todos deram 10, talvez seja porque a máquina aqui é potente, e foram poucas interações.
Sorry
Com todas as otimizações do compilador, não é confiável fazer testes de performance num trecho de código pequeno.
Recentemente eu li um artigo que dizia que um código sincronizado não é tãããão mais lento assim. http://www-128.ibm.com/developerworks/java/library/j-jtp04223.html?ca=dgr-lnxw07-obg-JavaMyths