在下面的代码中,如果字符串"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
答案 0 :(得分:3)
在下面的代码中,如果字符串" Mult"在test1(4)方法调用之前,为什么方法在字符串之前输出?
因为您在使用" Mult:"来调用System.out.println
之前调用方法。一部分。
基本上,您的代码相当于:
public static void main(String[] args){
int tmp = test1(4); // This prints N:4
System.out.println("Mult:" + tmp);
}
如果您考虑一下,test1
方法已经在字符串连接发生之前完成(否则我们无法知道连接的右侧是什么)运算符是),字符串连接必须在System.out.println
调用发生之前发生(否则我们无法知道我们要打印的内容)。有意义/
答案 1 :(得分:3)
首先要注意的是当你使用带有两个操作数的+
时,其中一个操作数是String
,表达式的结果是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
进入String
值
"Mult:8"
然后将String
用作println(..)
方法的单个参数,将其输出到程序的标准输出。
答案 2 :(得分:1)
当
System.out.println("Mult:" + test1(4));
运行,必须先评估test1(4),然后才能进行System.out.println'd。 因此,JVM将运行以下命令:
evalate result of test1(4) {
print ("N:" + 4);
return 2*4;
}
evalate result of "Mult:" + returnedValue {
print("Multi:" + returnedValue);
}
JVM在知道其价值之前无法打印。在这种情况下,首先评估test1(4),以便JVM知道要打印的内容(返回值)。
您也可以通过这种方式完成任务>>
int result = test1(4); //This prints out 4 and evaluates to 8
System.out.println("Mult: " + result); //This concats "Mult: " and 8 after converting it to of type String
答案 3 :(得分:0)
"Mult:" + test1(4)
上面一行是一个表达式,其值是"Mult:"
和test1(4)
结果的串联。因此,为了能够知道此连接的结果,执行test1(4)
。此执行打印"N:4"
,然后将n乘以2,返回8. 8然后与"Mult:"
连接,并打印结果。
答案 4 :(得分:0)
很明显。如果一个方法没有计算出它的参数就不能完成。 在您的情况下,println方法必须先计算其参数才能执行。因此,首先完成对test1方法的函数调用。然后执行main中的语句。