[Java] Java soll in Ordnung sein, um Zeichenfolgen mit + zu verketten, also habe ich es überprüft

Was ich versucht habe

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

Für JDK8

Ergebnis

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.

Fazit

~~ 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.

Umgebung

[Aktualisiert am 22. Februar 2020] Für JDK13

Mir wurde gesagt, dass StringBuilder nach JDK11 nicht mehr verwendet wird, also habe ich es versucht.

Ergebnis

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.

Fazit

Es scheint in Ordnung zu sein, + überall für die Verkettung von Zeichenfolgen zu verwenden.

Umgebung

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

[Java] Java soll in Ordnung sein, um Zeichenfolgen mit + zu verketten, also habe ich es überprüft
Ich habe versucht, mit Java zu interagieren
So verketten Sie Zeichenfolgen mit Java
Java9 war enthalten, also habe ich jshell ausprobiert.
Ich möchte Java8 für jeden mit Index verwenden
Ich war süchtig danach, onActivityResult () mit DialogFragment zu machen
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
Ich habe nc (netcat) normalerweise mit JAVA gemacht
Java: Eine Geschichte, in der ich mich unwohl fühlte, als mir beigebracht wurde, Strings ohne Grund mit Gleichen zu vergleichen.
So verketten Sie Zeichenfolgen
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Parkett-Tools gibt java.lang.ExceptionInInitializerError, also habe ich es mit java8 funktionieren lassen
Ich war süchtig danach, default_url_options mit der Einführung von Rails zu setzen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Was ich mit der Redmine REST API süchtig gemacht habe
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Verschiedene Möglichkeiten zum Verketten von durch Kommas getrennten Zeichenfolgen in Java
Ich möchte verschiedene Funktionen mit Kotlin und Java implementieren!
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
[Java] Ich möchte Standardeingabe und Standardausgabe mit JUnit testen
Ich habe versucht, mit Ractor mehrere Objekte übergeben zu können
Java zum Spielen mit Function
Sortieren Sie Zeichenfolgen als charakteristische Funktion mit Java
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Java-Argumente, die mit gradle run ausgeführt werden sollen, können mit --args angegeben werden (seit Gradle 4.9).
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Ich habe nachgesehen, weil die Antwort beim Debuggen mit Tomcat 8 seltsam war
Ich habe versucht, eine Android-Anwendung mit MVC zu erstellen (Java)
Beurteilen Sie, ob die zu vergleichenden Zeichenfolgen in Java identisch sind
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Der Operator, der geboren wurde, um geboren zu werden, instanceof (Java) ~ So verwenden Sie den instanceof-Operator ~
Ich möchte mit einem regulären Ausdruck zwischen Zeichenketten extrahieren
Ich habe versucht, die letzten 10 Fragen zu lösen, die nach der Registrierung bei AtCoder in Java gelöst werden sollten