在下面的代码中,如果字符串 "Mult"
出现在 test1(4)
方法调用之前,为什么该方法会在字符串之前输出?为什么它会从输出方法的第一部分跳出来,然后离开方法输出字符串,然后返回到方法输出方法的返回值?
代码:
public class Scratch{
public static void main(String[] args){
System.out.println("Mult:" + test1(4));
}
public static int test1(int n){
System.out.println("N:" + n);
return n*2;
}
}
输出:
N:4
Mult:8
最佳答案
首先要注意的是,当您将 +
与两个操作数一起使用时,其中两个操作数之一是 String
,表达式的结果是 字符串
。
因此,在下面的方法调用表达式中
System.out.println("Mult:" + test1(4));
您正在调用PrintStream#println(String)
因为 out
是 PrintStream
类型的变量。请注意该方法如何接受单个 String
参数。因此,String
必须从 String
连接中解析
"Mult:" + test1(4)
为此,必须执行 test1(4)
方法。
public static int test1(int n){
System.out.println("N:" + n);
return n*2;
}
此方法再次使用 PrintStream#println(String)
但带有参数
"N:" + n
这是另一个产生 String
值的 String
连接
"N:4"
对于这个特定的调用。然后,生成的 String
值将用作 println(..)
方法的参数,该方法将其输出到程序的标准输出。
该方法随后返回值 8
,因为 4 * 2 = 8
。
该返回值是调用 test1(4)
方法的值。所以
System.out.println("Mult:" + test1(4));
相当于
System.out.println("Mult:" + 8);
然后发生String
连接,转换
"Mult:" + 8
进入字符串
值
"Mult:8"
然后将该String
用作println(..)
方法的单个参数,该方法将其输出到程序的标准输出。
关于Java输出String和方法返回时,为什么方法返回先输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22899934/