Étant curieu, j'ai tout de suite fait un petit benchmark pour tester les différentes façon de construire un String dynamiquement à l'intérieur d'une boucle. Voici le code :


Java
public class Test {

//nombre d'itération
private final static int LOOP = 10000;

public static void main(String[] args){
testString();
testStringBuffer();
testStringBuilder();
}  

/**
*méthode qui test la classe String
*/
private static void testString(){                      
final long time = System.currentTimeMillis();        
String str = "";
for(int i=0; i<LOOP; i++){
str += "liguorien";  
}        
System.out.println("String : " + (System.currentTimeMillis()-time) + "ms");      
}

/**
*méthode qui test la classe StringBuffer
*/
private static void testStringBuffer(){                      
final long time = System.currentTimeMillis();        
StringBuffer str = new StringBuffer();
for(int i=0; i<LOOP; i++){
str.append("liguorien");  
}        
System.out.println("StringBuffer : " + (System.currentTimeMillis()-time) + "ms");      
}

/**
*méthode qui test la classe StringBuilder
*/
private static void testStringBuilder(){                      
final long time = System.currentTimeMillis();        
StringBuilder str = new StringBuilder();
for(int i=0; i<LOOP; i++){
str.append("liguorien");  
}        
System.out.println("StringBuilder : " + (System.currentTimeMillis()-time) + "ms");      
}    
}

J'ai fait le test sur un Pentium 4, 1.8ghz, 1go RAM, Windows XP SP2 et J2SE 5.0_02.

Voici les résultats :
String : 89569ms
StringBuffer : 20ms
StringBuilder : 10ms


Comme on peut le constaster, il y a une énorme différence entre la classe String et les 2 suivantes ! Par contre, la différence entre le Buffer et le Builder est assez mince.

10 millisecondes pour concaténer 10000 fois le mot "liguorien". J'aimerais bien avoir des performances semblable en ActionScript... ;) (~2000ms)