Machen Sie eine Datei wie diese
PlainString.java
import java.time.LocalDateTime;
class PlainString {
String getString() {
//e! String+Ich werde mich mit verbinden! ??
return "abc" + LocalDateTime.now();
}
}
Kompilieren
javac PlainString.java
Ich habe versucht, die Kompilierung rückgängig zu machen.
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
}
Es wurde fest durch "StringBuilder" ersetzt.
~~ Imadokis Java scheint in Ordnung zu sein, um Strings mit + zu verketten, ohne sich darüber Gedanken zu machen. ~~ ** Hinzugefügt am 22.02.2020 ** Wir haben einen Kommentar von @ cfm-art erhalten. Vielen Dank. Wenn Sie nur verketten möchten, ist + in Ordnung. Wenn Sie + in einer Schleife verwenden, wird jedes Mal ein StringBuilder erstellt, der unbrauchbar ist.
Mir wurde gesagt, dass StringBuilder nach JDK11 nicht mehr verwendet wird, also habe ich es versucht.
Ich habe Javac und dann Javap gemacht.
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
}
Der "StringBuilder" verschwand und wurde durch "makeConcatWithConstants" ersetzt.
Es scheint in Ordnung zu sein, + überall für die Verkettung von Zeichenfolgen zu verwenden.
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)
Recommended Posts