2
votes

Comportement de System.out.println lors de l'utilisation conjointe de String et int

Considérez l'extrait de code ci-dessous -

7
7 34
34

La sortie de l'extrait de code ci-dessus arrive comme -

public class Student {

    public static void main(String args[]) {
        int a = 3;
        int b = 4;
        System.out.println(a + b +" ");
        System.out.println(a + b +" "+ a+b);
        System.out.println(""+ a+b);

    }
}

Il ressort clairement du sortie que si nous utilisons String au début dans l'instruction d'impression, les entiers sont concaténés. Mais, si nous utilisons un entier au début, les valeurs sont ajoutées et affichées.

Quelqu'un peut-il expliquer pourquoi ce comportement?

J'ai même essayé de regarder l'implémentation de println ( ) dans la classe PrintStream mais n'a pas pu comprendre.


2 commentaires

ce que vous avez décrit, c'est le comportement. la concaténation ne saura qu'il s'agit d'une concaténation String qu'une fois qu'elle détectera une chaîne. faire l'ajout de int avant une chaîne, et il exécutera cette augmentation avant de passer sa première chaîne


Cela n'a rien à voir avec println , c'est ainsi que les expressions sont résolues en Java.


3 Réponses :


4
votes

En fait, ce n'est pas l'implémentation println () qui est à l'origine de cela, c'est une manière Java de traiter l'opérateur + lorsqu'il s'agit de Chaînes .

En fait l'opération est traitée de gauche à droite donc:

  • Si la chaîne précède int (ou tout autre type) dans l'opération String conversion est utilisé et tous les autres opérandes seront traité comme des chaînes , et il consiste uniquement en une opération de concaténation String .
  • Si int vient en premier dans l'opération, il sera traité comme int , donc l'opération addition est utilisée .

C'est pourquoi a + b + "" donne 7 car String est à la fin de l'opération, et pour les autres expressions a + b + "" + a + b ou "" + a + b , les variables a et b être traitée comme des chaînes si elles viennent après une chaîne dans l'expression.

Pour plus de détails, vous pouvez consulter Opérateur de concaténation de chaînes + dans les spécifications Java .


0 commentaires

0
votes

Premier cas:

System.out.println(""+ a+b);

Dans cet ordre, a + b sera d'abord évalué comme une somme int, puis converti en une chaîne lors de l'ajout de l'espace (le deuxième + ici est pour la concaténation de chaînes).

Deuxième cas:

System.out.println(a + b +" "+ a+b);

Ici, la première partie sera une opération de somme int puis convertie en une chaîne lorsque nous ajoutons le space (le 2ème + est pour la concaténation de chaînes), le reste sera une concaténation de chaînes car l'opérande de gauche est déjà une chaîne.

Troisième cas:

System.out.println(a + b +" ");

Identique au deuxième.

Pour changer ce comportement, ajoutez simplement des parenthèses pour forcer la somme int avant le chaîne concaténations.


0 commentaires

3
votes

Cela n'a rien à voir avec l'implémentation de println . La valeur de l'expression passée à println est évaluée avant l'exécution de println .

Il est évalué de gauche à droite. Tant que les deux opérandes de + sont numériques, l'addition sera effectuée. Une fois qu'au moins l'un des opérandes est une String , la concaténation de String sera effectuée.

System.out.println(a    +      b          +       " ");
                  // int + int      int + String
                  // addition,      concatenation 
System.out.println(a    +      b    +    " "   +    a   +    b);
                  // int + int  int + String Str+Str  Str+Str
                  // addition,    concat,    concat,  concat
System.out.println(""   +     a     +      b);
                  // String+int  String+int
                  // concat,      concat


0 commentaires