Compilateurs Java ont de la mise en œuvre de +. La documentation Javadoc dit:
Le langage Java fournit un soutien spécial pour la chaîne
l'opérateur de concaténation ( + ), et pour la conversion des autres objets
les chaînes de caractères. La concaténation de chaîne est mise en œuvre par le biais de la
StringBuilder(ou StringBuffer) de la classe et de sa méthode append.Chaîne
les conversions sont mis en œuvre par le biais de la méthode toString, défini par
Objet et héritées par toutes les classes en Java. Pour plus d'
informations sur la concaténation de chaîne et de conversion, voir Gosling, de la Joie,
et Steele, La Java Langage de Spécification.
Vous pouvez essayer de vérifier ce:
public static void main(String[] args) {
String s1 = "s1";
String s2 = "s2";
String s3 = s1 + s2;
String s4 = new StringBuilder(s1).append(s2).toString();
}
Le code ci-dessus génère le même bytecode pour + et lors de l'utilisation de StringBuilder:
L0
LINENUMBER 23 L0
LDC "s1"
ASTORE 1
L1
LINENUMBER 24 L1
LDC "s2"
ASTORE 2
// s3 = s1 + s2
L2
LINENUMBER 25 L2
NEW java/lang/StringBuilder
DUP
ALOAD 1
INVOKESTATIC java/lang/String.valueOf(Ljava/lang/Object;)Ljava/lang/String;
INVOKESPECIAL java/lang/StringBuilder.<init>(Ljava/lang/String;)V
ALOAD 2
INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String;
ASTORE 3
// s4 = new StringBuilder(s1).append(s2).toString()
L3
LINENUMBER 26 L3
NEW java/lang/StringBuilder
DUP
ALOAD 1
INVOKESPECIAL java/lang/StringBuilder.<init>(Ljava/lang/String;)V
ALOAD 2
INVOKEVIRTUAL java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString()Ljava/lang/String;
ASTORE 4
L4
LINENUMBER 27 L4
RETURN