Il était déjà largement connu depuis longtemps (* autour de Java 1.5) que "les jointures de chaîne ne sont pas" + ", mais l'utilisation de StringBuffer accélère le processus." Par conséquent, j'utilise toujours en gros StringBuffer et StringBuilder pour la concaténation de chaînes, mais je me suis soudainement demandé "Quelle est la vitesse de traitement de la méthode concat de la classe String?", Donc cette fois, ces vitesses de traitement J'ai essayé de comparer.
StringTest.java
public class StringTest {
public static void main(String[] args) {
plus();
concat();
builder();
buffer();
}
public static void plus() {
long start = System.currentTimeMillis();
String txt = "abc";
for (int i=0; i<100000; i++) {
txt += "abc";
}
long end = System.currentTimeMillis();
System.out.println("+:" + (end - start) + "ms");
}
public static void concat() {
long start = System.currentTimeMillis();
String txt = "abc";
for (int i=0; i<100000; i++) {
txt = txt.concat("abc");
}
long end = System.currentTimeMillis();
System.out.println("concat:" + (end - start) + "ms");
}
public static void builder() {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("abc");
for (int i=0; i<100000; i++) {
sb.append("abc");
}
String txt = sb.toString();
long end = System.currentTimeMillis();
System.out.println("StringBuilder:" + (end - start) + "ms");
}
public static void buffer() {
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("abc");
for (int i=0; i<100000; i++) {
sb.append("abc");
}
String txt = sb.toString();
long end = System.currentTimeMillis();
System.out.println("StringBuffer:" + (end - start) + "ms");
}
}
Traitement du contenu | temps de traitement |
---|---|
+Combiné par | 7439ms |
String.concat()Combiné par | 2990ms |
Rejoignez StringBuilder | 2ms |
Rejoindre par StringBuffer | 4ms |
String.concat()
String.Extrait de cours
//Source obtenue à l'aide du plugin Eclipse Class Decompiler.
public final class String implements Serializable, Comparable<String>, CharSequence {
private final char[] value;
public String concat(String arg0) {
int arg1 = arg0.length();
if(arg1 == 0) {
return this;
} else {
int arg2 = this.value.length;
char[] arg3 = Arrays.copyOf(this.value, arg2 + arg1);
arg0.getChars(arg3, arg2);
return new String(arg3, true);
}
}
void getChars(char[] arg0, int arg1) {
System.arraycopy(this.value, 0, arg0, arg1, this.value.length);
}
}
Le langage Java fournit une prise en charge spéciale des opérateurs de concaténation de chaînes (+) et d'autres conversions objet-chaîne. La concaténation de chaînes est implémentée à l'aide de la classe StringBuilder (ou StringBuffer) et de sa méthode append.