-9

我有一段代码,当我用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());    
    }
}

输出

爪哇

m1 在 Hello
m2 在 Hello
m3 在 Hello
10……20…….30

在 CI 中,我得到以下 o/p。

m3 在 Hello
m2 在 Hello
m1 在 Hello
10 .....20 ......30

我没想到会有不同的输出,我是否缺少一些基本逻辑?

4

2 回答 2

4

尽管该代码既不能用 C 也不能用 C++ 编译,但您的基本问题在这里:

System.out.println(h.m1() + "......" + h.m2() + "......." + h.m3());

在 C 和 C++ 中,编译器对这些调用的排序方式没有限制。它可以先调用 m3 然后调用 m2 然后调用 m1,或者调用 m2 然后调用 m3 然后调用 m1,等等……这是实现定义的行为,您不能依赖它。

于 2013-05-27T10:45:59.183 回答
2

您似乎省略了 C 代码。

不同输出的原因是,在 C 中,单个语句中函数的执行顺序是实现定义的,并且可以以任何顺序发生。您不能假设在单个表达式中调用的函数将以任何特定顺序发生,除非您使用了有限数量的运算符之一,例如&&or ? :

于 2013-05-27T10:44:41.103 回答