Wie wäre es mit einem einfachen Test? Verwenden Sie den unten stehenden Code:
long start = System.currentTimeMillis();
String a = "a";
String b = "b";
for (int i = 0; i < 10000000; i++) { //ten million times
String c = a.concat(b);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
- El
"a + b"
Version ausgeführt in 2500ms .
- El
a.concat(b)
ausgeführt in 1200ms .
Mehrere Male getestet. Die concat()
Die Ausführung der Version dauerte im Durchschnitt nur die Hälfte der Zeit.
Dieses Ergebnis hat mich überrascht, weil die concat()
Methode erzeugt immer eine neue Zeichenkette (sie gibt ein " new String(result)
". Das ist allgemein bekannt:
String a = new String("a") // more than 20 times slower than String a = "a"
Warum war der Compiler nicht in der Lage, die Zeichenkettenerstellung im "a + b"-Code zu optimieren, obwohl er wusste, dass dies immer dieselbe Zeichenkette ergab? Er könnte eine neue String-Erstellung vermeiden. Wenn Sie der obigen Aussage keinen Glauben schenken, testen Sie sie selbst.