[Java] On a dit que Java pouvait concaténer des chaînes avec +, alors j'ai vérifié

Ce que j'ai essayé

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

Pour JDK8

résultat

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

Conclusion

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

environnement

[Mis à jour le 22 février 2020] Pour JDK13

On m'a dit que StringBuilder n'est pas utilisé après JDK11, alors je l'ai essayé.

résultat

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.

Conclusion

Il semble correct d'utiliser + n'importe où pour la concaténation de chaînes.

environnement

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] On a dit que Java pouvait concaténer des chaînes avec +, alors j'ai vérifié
J'ai essayé d'interagir avec Java
Comment concaténer des chaînes avec Java
Java9 était inclus, j'ai donc essayé jshell.
Je veux utiliser java8 forEach avec index
J'étais accro à faire onActivityResult () avec DialogFragment
J'ai essayé de casser le bloc avec java (1)
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
J'ai essayé d'implémenter Sterling Sort avec Java Collector
Je veux faire des transitions d'écran avec kotlin et java!
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
Java: Une histoire qui m'a mis mal à l'aise quand on m'a appris à comparer des chaînes avec des égaux sans raison.
Comment concaténer des chaînes
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
Parquet-tools donne java.lang.ExceptionInInitializerError, donc je l'ai fait fonctionner avec java8
J'étais accro à la configuration de default_url_options avec l'introduction de la conception de Rails
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Ce à quoi j'étais accro avec l'API REST Redmine
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Plusieurs façons de concaténer des chaînes séparées par des virgules en Java
Je veux implémenter diverses fonctions avec kotlin et java!
Assurez-vous de comparer le résultat Java compareTo avec 0
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
J'ai essayé de pouvoir passer plusieurs objets avec Ractor
Java pour jouer avec Function
Trier les chaînes comme une fonction caractéristique avec Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Je veux revenir à l'écran précédent avec kotlin et java!
Les arguments Java à exécuter avec gradle run peuvent être spécifiés avec --args (depuis Gradle 4.9)
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
J'ai vérifié car la réponse était étrange lors du débogage avec Tomcat 8
J'ai essayé de créer une application Android avec MVC maintenant (Java)
Juger si les chaînes de caractères à comparer sont les mêmes en Java
[Java] Je veux effectuer distinctement avec la clé dans l'objet
L'opérateur qui est né pour naître, instanceof (Java) ~ Comment utiliser l'opérateur instanceof ~
Je veux extraire entre des chaînes de caractères avec une expression régulière
J'ai essayé de résoudre les 10 dernières questions qui devraient être résolues après m'être inscrit auprès d'AtCoder en Java