我有一段代码,当我在 Java 中编译时,输出与在 C
中编译时的输出相比有所不同class Hello{
int m1() {
System.out.println("m1 in Hello");
return 10;
}
int m2() {
System.out.println("m2 in Hello");
return 20;
}
int m3() {
System.out.println("m3 in Hello");
return 30;
}
}
public class Test36 {
public static void main(String args[]) {
Hello h = new Hello();
System.out.println(h.m1() + "......" + h.m2() + "......." + h.m3());
}
}
输出
Java 中的
你好的m1 你好的m2 你好的m3 10 ...... 20 ...... 0.30
在C中我得到以下o / p。
m3 in Hello
你好的m2 你好的m1 10 ...... 20 ...... 30
我没想到会有不同的输出,我错过了一些基本逻辑吗?
答案 0 :(得分:4)
虽然该代码既不会在C语言或C ++中编译,但您的基本问题是:
System.out.println(h.m1() + "......" + h.m2() + "......." + h.m3());
在C和C ++中,编译器如何命令这些调用没有任何限制。它可以调用m3然后m2然后m1,或m2然后m3然后m1等等......它是实现定义的行为,你不能依赖它。
答案 1 :(得分:2)
您似乎省略了C代码。
输出不同的原因是在C中,单个语句中函数的执行顺序是实现定义的,并且可以按任何顺序发生。您不能假设在单个表达式中调用的函数将以任何特定顺序发生,除非您使用了&&
或? :
等有限数量的运算符之一。