代码在java中,如下:
class Demo{
public static int Main(String[] ab){
System.out.println("Hello Main");
return 0;
}
}
public class New{
public static void main(String[] ab){
String abc[]={"1","2"};
System.out.println("Hello"+Demo.Main(abc));
}
}
此代码提供的输出是:
Hello Main
Hello0
根据我的逻辑,这个输出必须是
Hello Hello Main
0
有人可以解释这个程序的意外输出吗?
提前谢谢!
答案 0 :(得分:2)
您的New.main
方法执行此行
System.out.println("Hello" + Demo.Main(abc));
因此,在实际执行println
之前,它必须评估所有参数。所以它首先执行Demo.Main
。当它执行它时会遇到
System.out.println("Hello Main");
return 0;
因此它打印Hello Main
,打印一个新行并返回0. Demo.Main(abc)
现在被评估为0,因此它可以继续执行:
System.out.println("Hello" + 0);
并打印Hello0
答案 1 :(得分:2)
输出完全符合预期。
您所做的假设似乎是您的Demo.Main()
方法也会返回 Hello Main
,但它实际上只会将其写入标准输出。
所以执行的顺序是:
main()
已被调用Demo.Main()
已被调用Demo.Main()
将Hello Main
写入标准输出Demo.Main()
将0返回main()
main()
写道"你好"将0结果加到标准输出答案 2 :(得分:0)
首先执行括号内的代码。这意味着Demo.Main(abc)
将首先运行,并在完成后返回0
。
这意味着,您将首先在控制台上看到Hello Main
。在换行后,它会打印Hello
并附加Demo.Main(abc)
的返回值(确实是0
)
结果输出是:
Hello Main
Hello0