Para responder essa pergunta fiz um teste simples utilizando as duas classe, segue o código:
package com.blogspot.rozolin.utils;
import java.util.Date;
public class StringUtils {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
testaStringBuilder();
testaString();
}
}
private static void testaString() {
long tempo = new Date().getTime();
String string = "";
for (int i = 0; i < 10000; i++) {
// Concatena 10000 vezes utilizando a classe String
string = string.concat(""+i);
}
long milissegundo = new Date().getTime() - tempo;
System.out.println("String demorou: " + milissegundo + " Milissegundo");
}
private static void testaStringBuilder() {
long tempo = new Date().getTime();
StringBuilder stringBuilder = new StringBuilder("");
for (int i = 0; i < 10000; i++) {
// Concatena 10000 vezes utilizando a classe StringBuilder
stringBuilder.append(i);
}
long milissegundo = new Date().getTime() - tempo;
System.out.println("StringBuilder demorou: " + milissegundo
+ " Milissegundo");
}
}
Resultado:
StringBuilder demorou: 1 Milissegundo String demorou: 116 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 108 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 105 Milissegundo StringBuilder demorou: 0 Milissegundo String demorou: 105 Milissegundo StringBuilder demorou: 0 Milissegundo String demorou: 105 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 109 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 104 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 105 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 104 Milissegundo StringBuilder demorou: 1 Milissegundo String demorou: 105 Milissegundo
A diferença é muito grande StringBuilder com certeza é muito mais rápido.