Encore plus rapide:
public class ScratchPad {
private static String a;
public static void main( String[] args ) throws Exception {
long time = System.currentTimeMillis();
StringBuilder sb = new StringBuilder( 128 );
for( int i = 0; i < 10000000; i++ ) {
// Resetting the string is faster than creating a new object.
// Since this is a critical loop, every instruction counts.
//
sb.setLength( 0 );
sb.append( "someString" );
sb.append( "someString2" );
sb.append( "someStrin4g" );
sb.append( "someStr5ing" );
sb.append( "someSt7ring" );
setA( sb.toString() );
}
System.out.println( System.currentTimeMillis()-time );
}
private static void setA( String aString ) {
a = aString;
}
}
Dans la philosophie de l'écriture solide code, les rouages de la méthode qui devrait être caché les objets qui utilisent la méthode. Ainsi, il ne fait pas de différence à partir de la perspective du système si vous redeclare le StringBuilder dans la boucle ou à l'extérieur de la boucle. Depuis déclarant en dehors de la boucle est plus rapide, et il ne permet pas de rendre le code plus compliqué à lire, puis de réutiliser l'objet plutôt que de le retrouver.
Même si le code a été plus compliqué, et on savait que l'instanciation d'objets a été le goulot d'étranglement, en commentaire.
Notez que "someString"+i
est le véritable goulot d'étranglement comme le + de l'opérateur est cher; utiliser append(...)
à la place.
Trois pistes avec cette réponse:
$ java ScratchPad
1567
$ java ScratchPad
1569
$ java ScratchPad
1570
Trois pistes avec les autres de répondre:
$ java ScratchPad2
1663
2231
$ java ScratchPad2
1656
2233
$ java ScratchPad2
1658
2242
Bien que non significatif, le réglage de l' StringBuilder
s'initiale de la taille de la mémoire tampon donnera un petit gain.