8

该程序给出输出 -

A 1 2

它不应该给出输出吗?

1 A 2

因为首先 ai 应该打印 1 然后 a.getI() 执行并且应该打印 A 2

public class A1{

     int i=1;

     public int getI(){
          System.out.print("A ");
          return i+1;
     }

     public static void main(String args[]){
          A1 a=new A1();
          System.out.print(a.i+" "+a.getI());
     }
}
4

2 回答 2

12

在这个表达式中:

a.i+" "+a.getI()

首先评估对的调用a.getI(),然后通过连接a.i加号形成字符串a.getI()

于 2012-04-28T13:50:07.380 回答
8

JVM 做的第一件事就是构造字符串。所以从这里开始:

a.i + " "

这是首先完成的。现在,我们有"1 ". 接下来它处理这个:

"1 " + a.getI()

为了缝合这两个部分,将执行该方法以知道将什么缝合在一起。所以,现在输入方法:

System.out.print("A ");
return i+1;

执行第一个打印语句。"A "打印到控制台(1)。现在该方法返回i + 1,即2。这意味着我们有这个:

"1 " + "2"

这是"1 2"。此时字符串构建完成,因此将其传递给println(). 现在"1 2"打印到控制台。(2

如您所见,首先是 ( 1 ) 执行,然后是 ( 2 )。因此,在控制台中,这会导致:

A 1 2
于 2012-04-28T13:55:28.167 回答