Ich denke nicht, dass es Sinn macht, zu versuchen, die Leistung so zu optimieren. Heute (2019) laufen beide Statements ungefähr 11 Sekunden für 100.000.000 Schleifen auf meinem I5-Laptop:
String a;
StringBuilder sb = new StringBuilder();
long time = 0;
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
sb3.append("someString2");
sb3.append("someStrin4g");
sb3.append("someStr5ing");
sb3.append("someSt7ring");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
sb.append("someString2");
sb.append("someStrin4g");
sb.append("someStr5ing");
sb.append("someSt7ring");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 11000 ms (Deklaration innerhalb der Schleife) und 8236 ms (Deklaration außerhalb der Schleife)
Selbst wenn ich Programme für die Adressveröffentlichung mit einigen Milliarden Schleifen ausführe, beträgt die Differenz 2 Sekunden. Für 100 Millionen Schleifen macht das keinen Unterschied, da diese Programme stundenlang laufen. Beachten Sie auch, dass die Dinge anders sind, wenn Sie nur eine Append-Anweisung haben:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3416 ms (innere Schleife), 3555 ms (äußere Schleife) Die erste Anweisung, die den StringBuilder innerhalb der Schleife erstellt, ist in diesem Fall schneller. Und wenn Sie die Ausführungsreihenfolge ändern, geht es viel schneller:
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
sb.setLength(0);
sb.delete(0, sb.length());
sb.append("someString");
a = sb.toString();
}
System.out.println(System.currentTimeMillis() - time);
System.gc();
time = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
StringBuilder sb3 = new StringBuilder();
sb3.append("someString");
a = sb3.toString();
}
System.out.println(System.currentTimeMillis() - time);
==> 3638 ms (äußere Schleife), 2908 ms (innere Schleife)
Grüße, Ulrich