Créez un fichier comme celui-ci
PlainString.java
import java.time.LocalDateTime;
class PlainString {
String getString() {
//e! Chaîne+Je vais me connecter avec! ??
return "abc" + LocalDateTime.now();
}
}
Compiler
javac PlainString.java
J'ai essayé de faire une compilation inverse.
javap -c PlainString
Compiled from "PlainString.java"
class PlainString {
PlainString();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
java.lang.String getString();
Code:
0: new #2 // class java/lang/StringBuilder
3: dup
4: invokespecial #3 // Method java/lang/StringBuilder."<init>":()V
7: ldc #4 // String abc
9: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
12: invokestatic #6 // Method java/time/LocalDateTime.now:()Ljava/time/LocalDateTime;
15: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
18: invokevirtual #8 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
21: areturn
}
Il a été fermement remplacé par «StringBuilder».
~~ Le Java d'Imadoki semble convenir pour concaténer des chaînes en utilisant + sans se soucier de cela. ~~
** Ajouté le 22/02/2020 ** Nous avons reçu un commentaire de @ cfm-art. Merci beaucoup.
Si vous voulez juste concaténer, + c'est bien.
Si vous utilisez + dans une boucle, un StringBuilder
sera créé à chaque fois, donc il est inutile.
On m'a dit que StringBuilder n'est pas utilisé après JDK11, alors je l'ai essayé.
J'ai fait javac puis javap.
javap -c PlainString Compiled from "PlainString.java"
class PlainString {
PlainString();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
java.lang.String getString();
Code:
0: invokestatic #7 // Method java/time/LocalDateTime.now:()Ljava/time/LocalDateTime;
3: invokedynamic #13, 0 // InvokeDynamic #0:makeConcatWithConstants:(Ljava/time/LocalDateTime;)Ljava/lang/String;
8: areturn
}
Le StringBuilder
a disparu et a été remplacé par quelque chose appelé makeConcatWithConstants
.
Il semble correct d'utiliser + n'importe où pour la concaténation de chaînes.
openjdk version "13.0.2" 2020-01-14 OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.2+8) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.2+8, mixed mode, sharing)