java系统。出来同时使用字符串和int时的println行为
考虑下面的代码片段-
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,那么整数将被连接起来。但是,如果我们首先使用integer,则会添加并显示值
有人能解释一下为什么会有这种行为吗
我甚至试着在PrintStream类中查看println()方法的实现,但没有弄清楚
# 1 楼答案
它与
println
的实现无关。传递给println
的表达式的值在执行println
之前进行计算它从左到右求值。只要
+
的两个操作数都是数字,就会执行加法。一旦至少有一个操作数是String
,将执行String
串联# 2 楼答案
第一种情况:
按此顺序,
a + b
将首先作为int和求值,然后在添加空格时转换为字符串(这里的第二个+
用于字符串连接)第二种情况:
在这里,第一部分将是int-sum操作,然后在添加空间时转换为字符串(第二部分
+
用于字符串串联),其余部分将是字符串串联,因为左操作数已经是字符串第三种情况:
和第二个一样
注意事项:
为了改变这种行为,只需在
string
串联之前添加括号强制int
和# 3 楼答案
实际上并不是
println()
实现导致了这种情况,这是处理Strings
时处理+
操作符的Java
方法实际上,手术是从左到右处理的,因此:
string
位于int
(或任何其他类型)之前,则使用^{strings
,它只包含一个String
串联操作李>int
排在第一位,它将被视为int
,因此使用addition
操作李>这就是为什么
a + b +" "
会给出7
,因为String
在操作的末尾,对于其他表达式a + b +" "+ a+b
或""+ a+b
,如果变量在表达式中的a
和b
后面,则变量a
和b
将被视为strings
有关更多详细信息,请查看String Concatenation Operator + in Java Specs