Java和C:相同代码的不同输出

时间:2013-05-27 10:40:33

标签: java c

我有一段代码,当我在 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

我没想到会有不同的输出,我错过了一些基本逻辑吗?

2 个答案:

答案 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中,单个语句中函数的执行顺序是实现定义的,并且可以按任何顺序发生。您不能假设在单个表达式中调用的函数将以任何特定顺序发生,除非您使用了&&? :等有限数量的运算符之一。