一起使用String和int时System.out.println的行为

时间:2019-03-18 07:40:06

标签: java string int operation

考虑以下代码片段-

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);

    }
}

以上代码段的输出为-

7
7 34
34

从输出中可以明显看出,如果我们首先在print语句中使用String,那么这些整数将被连接在一起。但是,如果我们首先使用整数,则将添加并显示这些值。

有人可以解释为什么这种行为吗?

我什至试图查看PrintStream类中println()方法的实现,但无法弄清楚。

3 个答案:

答案 0 :(得分:5)

实际上,并不是由println()实现引起的,这是Java处理+运算符时使用Strings的方式。

实际上,该操作是从左到右处理的,因此:

  • 如果在操作String conversion中使用stringint(或任何其他类型)之前,并且所有其他操作数将被视为strings,和它仅由String串联操作组成。
  • 如果int在操作中排在首位,它将被视为int因此将使用addition操作

这就是a + b +" "之所以给7的原因,因为String在运算的末尾,对于其他表达式a + b +" "+ a+b""+ a+b,变量{{如果表达式中a之后出现,则将1}}和b视为strings

有关更多详细信息,请检查String Concatenation Operator + in Java Specs

答案 1 :(得分:3)

println的实现无关。在执行println之前先评估传递给println的表达式的值。

从左到右评估。只要+的两个操作数都是数字,就将执行加法运算。一旦至少一个操作数是String,将执行String串联。

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

答案 2 :(得分:0)

第一种情况:

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

按此顺序,a + b首先将作为一个整数求和,然后在添加空格时转换为字符串(此处的第二个+用于字符串连接)。

第二种情况:

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

这里第一部分将是整数求和运算,然后在我们添加空格时将其转换为字符串(第二个+用于字符串连接),其余部分将是字符串连接,因为左操作数已经是字符串。

第三种情况:

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

与第2个相同。

注释:

要更改此行为,只需添加括号以在int串联之前强制string和。