在下面的代码中,如果字符串"Mult"在test1(4)方法调用之前出现,为什么方法在字符串之前输出?为什么它会跳出输出方法的第一部分的形式,然后离开方法以输出字符串,然后返回到方法以输出方法的返回值?
"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
首先要注意的是,当+对两个操作数使用a时String,两个操作数之一是a ,表达式的结果是a String。
+
String
因此,在以下方法中调用表达式
System.out.println("Mult:" + test1(4));
您正在调用,PrintStream#println(String)因为它out是type的变量PrintStream。注意该方法如何接受单个String参数。因此,String 必须从解决String的级联
PrintStream#println(String)
out
PrintStream
"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(..)方法的参数,该方法将其输出到程序的标准输出。
println(..)
然后该方法返回该值8,因为4 * 2 = 8。
8
4 * 2 = 8
该返回值就是调用该test1(4)方法的值。所以
相当于
System.out.println("Mult:" + 8);
然后String发生串联,转换
"Mult:" + 8
转化为String价值
"Mult:8"
这String随后被用作单一的参数传递给println(..)它输出到你的程序的标准的输出方法。