Java当输出String和方法返回时,为什么方法首先返回输出?

时间:2014-04-06 20:57:35

标签: java methods output

在下面的代码中,如果字符串"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

5 个答案:

答案 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),因为outPrintStream类型的变量。请注意该方法如何接受单个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中的语句。