考虑以下代码片段-
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()方法的实现,但无法弄清楚。
答案 0 :(得分:5)
实际上,并不是由println()
实现引起的,这是Java
处理+
运算符时使用Strings
的方式。
实际上,该操作是从左到右处理的,因此:
String
conversion中使用string
在int
(或任何其他类型)之前,并且所有其他操作数将被视为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
和。