57 votes

Concaténation de chaînes et de caractères

Les déclarations suivantes,

 String string = "string";   

string = string +((char)65) + 5;
System.out.println(string);
 

Produire la sortie stringA5 .


Ce qui suit cependant

 String string = "string";

string += ((char)65) + 5;
System.out.println(string);
 

Produire string70 .

Où est la différence?

70voto

Kai Sternad Points 7676

Vous voyez ce comportement comme un résultat de la combinaison de la priorité de l'opérateur et de la chaîne de conversion.

JLS 15.18.1 états:

Si un seul opérande expression est de type String, puis la conversion de chaîne (§5.1.11) est réalisée sur l'autre opérande pour produire une chaîne de caractères au moment de l'exécution.

Par conséquent, la main droite opérandes dans votre première expression sont implicitement converti en chaîne de caractères: string = string + ((char)65) + 5;

Pour la seconde expression, toutefois string += ((char)65) + 5; le += composé opérateur d'affectation doit être considéré avec +. Depuis += est plus faible que +, + opérateur est évalué en premier. Nous avons là un char et un int ce qui résulte en un binaire numérique de la promotion d' int. Alors seulement, += est évaluée, mais à cette époque, le résultat de l'expression impliquant l' + opérateur a déjà été évalués.

16voto

Ashish Aggarwal Points 2155

Cas 1

string = string +((char)65) + 5;

tout est traité comme une Chaîne de caractères, mais dans le second cas

La séquence des opérations effectuées:

  • string +((char)65 = stringA
  • stringA + 5 = stringA5

Cas 2

 string += ((char)65) + 5;

d'abord côté droit est calculé signifie première opération sera comme ((char)65) + 5, Donc le résultat de l' ((char)65) + 5 is 70 et après que += opération.

La séquence des opérations effectuées:

  • (char)65 + 5 = 70
  • string + 70 = string70

Permet de voir 1 fois de plus

String string = "string";
string += ((char)65) + 5 + "A";
System.out.println(string); 

Sortie string70A

Raison De même le premier côté droit est calculé et sequesce de opertion est effectuée

  • (char)65 + 5 = 70
  • 70 + "A" = 70A
  • string + 70A = string70A

5voto

Maroun Maroun Points 31217

Quand tu écris:

 string = string + ((char)65) + 5;
 

C'est comme écrire:

 String string =
     new StringBuilder(string).append((char)65).append((int)5).toString();
 

Ce qui revient à ajouter string à A (représentation sous forme de caractères de la virgule 65) et 5 .

Dans ce dernier cas, vous calculez d’abord la main droite, puis vous ajoutez le résultat à string , c’est comme écrire:

 string = string + 70;
 

3voto

Michael Madsen Points 30610
string = string +((char)65) + 5;

Cela signifie "Ensemble de la chaîne de la concaténation de string, ((char)65), et 5." Cela est évaluée de gauche à droite (donc la première string + ((char)65), alors qu' +5, et la concaténation d'une chaîne de caractères et un entier convertit en entier en une chaîne de caractères.

string += ((char)65) + 5;

Cela signifie "Calculer le résultat de l' ((char)65)+5 et l'ajouter à la chaîne" - l'ensemble de la droite est évaluée avant d'ajouter le résultat à la chaîne. Depuis un char est vraiment juste un entier 16 bits, il additionne que les entiers de remise de 70, puis il ajoute que d' string.

0voto

arjacsoh Points 2053

C'est le même cas comme dans l'exemple:

System.out.println("abc"+10 + 5);

produit abc105 (ajouter en tant que Chaîne de caractères)

et

System.out.println(5 + 10);

produit 15 (ajouter que le Nombre)

L' String inclus dans le (premier lieu de l'opération des forces de tous les éléments pour être traités comme des Strings lors de l'exécution de l'opération. Dans votre cas += toutefois, l'opération est exécutée en premier dans la partie droite (traiter les éléments qu' int) en raison de la priorité de l'opérateur et est ensuite concaténées avec l' String.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X