De cette façon, le compilateur est le même par défaut. Donc ça ne sera pas lent
Autre exemple :
String a= "a";
String b = "b";
String s2= a+b;
Le s2 produit ainsi est très lent car la mémoire est sollicitée trois fois.
J'espère que vous l'adopterez et me donnerez des points si vous êtes satisfait. . Je suis un nouveau membre et j'espère vous servir tous ! ! ! (Je veux vraiment donner -1 point à la première réponse, et donner quelques réponses aléatoires)
Le premier type n'est pas seulement un problème lent, mais un morceau de code qui ressemble à de la merde.
new StringBuilder("a").append("b").append("c");
new StringBuilder("a" + "b" + "c");
Si vous l'utilisez comme ci-dessus, il est préférable d'utiliser "a" + "b" + "c" directement car il n'utilise aucune fonctionnalité de StringBuilder Avec l'optimisation de la compilation de JDK, le code final deviendra le suivant.
new StringBuilder(new StringBuilder("a").append("b").append("c").toString());
Je ne comprends pas du tout le deuxième. Quelle est l’importance d’utiliser StringBuilder ? N'est-ce pas juste une chaîne en soi ?
javap -cÉcoutez, le compilateur doit assembler les constantes de chaîne avec lesquelles vous avez connecté +, et les deux méthodes d'écriture doivent fonctionner de la même manière.
Les constantes directement + Les variables peuvent également être utilisées + Si vous vous souciez des performances, lisez ceci : http://calvin1978.blogcn.com/...
Tant que le caractère d'épissage '+' n'est pas utilisé entre les objets, il n'y a fondamentalement aucune différence entre utiliser ou non le caractère d'épissage '+' entre les chaînes et une fois l'objet chaîne généré, il sera modifié pour générer ; un autre objet. L'épissage entre tous les objets chaîne sera très lent ;
public static void main(String[] args) {
fun1(10000000);
>
privé static void fun1 (int length){
long min1 = new Date().getTime();
System.out.println(min1);
//1
for(int i=0;i<length;i++){
new StringBuffer("字符1;" +
"字符2;" +
"字符3;" +
"字符4;" +
"字符5;");
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);
>
vide statique privé fun2 (longueur int){
long min1 = new Date().getTime();
System.out.println(min1);
//2
for(int i=0;i<length;i++){
new StringBuffer("字符1;字符2;字符3;字符4;字符5;");
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);
>
vide statique privé fun3 (longueur int){
long min1 = new Date().getTime();
System.out.println(min1);
//3
for(int i=0;i<length;i++){
String aa = "字符1;" +
"字符2;" +
"字符3;" +
"字符4;" +
"字符5;";
new StringBuffer(aa);
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);
>
vide statique privé fun4 (longueur int){
long min1 = new Date().getTime();
System.out.println(min1);
//3
for(int i=0;i<length;i++){
String aa = "字符1;" ;
aa +="字符2;" ;
aa +="字符3;" ;
aa +="字符4;" ;
aa +="字符5;";
new StringBuffer(aa);
}
long min2 = new Date().getTime();
System.out.println(min2);
System.out.println(min2-min1);
Ces deux méthodes de création d'objets sont plus rapides et plus lentes. En fait, elles peuvent être converties en deux méthodes suivantes pour comparer plus rapidement et plus lentement :
String a = "Test";
String b = "T" + "e" + "s" + "t";
Bien sûr, ces deux méthodes sont également rapides. Dans la JVM, "T" + "e" + "s" + "t" sont en fait traités comme "Test". Jetons maintenant un coup d'œil à la méthode d'épissage de cordes suivante :
String a = "Te";
String b = a + "st";
La méthode ci-dessus est le moyen le moins efficace d'épisser des chaînes et est extrêmement déconseillée, car lors de l'épissage de chaînes comme celui-ci, la JVM génère en fait un nouveau StringBuilder, puis appelle la méthode append, puis exécute toString. tout simplement aussi lent qu'un chien (chien : je suis encore allongé sur le pistolet...) Donc pour résumer : les deux nouvelles méthodes StringBuilder écrites par le sujet sont en fait la même méthode, et l'efficacité est la même. Personne ne peut être trompé.
Réponse : Tout aussi rapide
J'espère que vous l'adopterez et me donnerez des points si vous êtes satisfait. . Je suis un nouveau membre et j'espère vous servir tous ! ! ! (Je veux vraiment donner -1 point à la première réponse, et donner quelques réponses aléatoires)
Le premier type n'est pas seulement un problème lent, mais un morceau de code qui ressemble à de la merde.
Si vous l'utilisez comme ci-dessus, il est préférable d'utiliser
"a" + "b" + "c"
directement car il n'utilise aucune fonctionnalité deStringBuilder
Avec l'optimisation de la compilation deJDK
, le code final deviendra le suivant.Je ne comprends pas du tout le deuxième. Quelle est l’importance d’utiliser
StringBuilder
? N'est-ce pas juste une chaîne en soi ?javap -c
Écoutez, le compilateur doit assembler les constantes de chaîne avec lesquelles vous avez connecté+
, et les deux méthodes d'écriture doivent fonctionner de la même manière.Les constantes directement +
Les variables peuvent également être utilisées +
Si vous vous souciez des performances, lisez ceci : http://calvin1978.blogcn.com/...
Tant que le caractère d'épissage '+' n'est pas utilisé entre les objets, il n'y a fondamentalement aucune différence entre utiliser ou non le caractère d'épissage '+' entre les chaînes et une fois l'objet chaîne généré, il sera modifié pour générer ; un autre objet. L'épissage entre tous les objets chaîne sera très lent ;
public static void main(String[] args) {privé static void fun1 (int length){
>vide statique privé fun2 (longueur int){
>vide statique privé fun3 (longueur int){
>vide statique privé fun4 (longueur int){
}Ces deux méthodes de création d'objets sont plus rapides et plus lentes. En fait, elles peuvent être converties en deux méthodes suivantes pour comparer plus rapidement et plus lentement :
Bien sûr, ces deux méthodes sont également rapides. Dans la JVM, "T" + "e" + "s" + "t" sont en fait traités comme "Test".
Jetons maintenant un coup d'œil à la méthode d'épissage de cordes suivante :
La méthode ci-dessus est le moyen le moins efficace d'épisser des chaînes et est extrêmement déconseillée, car lors de l'épissage de chaînes comme celui-ci, la JVM génère en fait un nouveau StringBuilder, puis appelle la méthode append, puis exécute toString. tout simplement aussi lent qu'un chien (chien : je suis encore allongé sur le pistolet...)
Donc pour résumer : les deux nouvelles méthodes StringBuilder écrites par le sujet sont en fait la même méthode, et l'efficacité est la même. Personne ne peut être trompé.