我有以下简单的Java代码,我知道输出是baedc
public class Main {
public static String c(){
System.out.print("b");
return "e";
}
public static void main(String[] args) {
String c = "c";
String d = "d";
System.out.print(("a"+c())+((d)+"c"));
}
}
我的问题是,为什么不从a
开始,因为我们在执行"a"
之前打印c()
?如果它首先执行c()
,那么为什么不beadc
?
答案 0 :(得分:9)
我们在执行
之前打印"a"
c()
这是不正确的:我们在调用"a"
之前在字符串连接表达式中使用c()
,在字符串构造完成之前我们不会打印。
这就是为什么"b"
(调用c()
的副作用)打印在"a"
之前,这是由串联表达式{{1}构造的字符串中的第一个字符}。
答案 1 :(得分:1)
作为参数传递给函数的所有函数调用必须在函数调用之前执行,因为包含函数必须知道这些函数在执行之前返回的内容。