解释为什么在相同的代码中的差异

时间:2013-08-01 11:39:51

标签: java c

我的代码是:

 code(){
    int x=7;
    x=x++;
    output x;   //prints 8 in C, prints 7 in Java
 }

以上代码:在 8 中打印 C ,在 7 中打印 Java strong> {{1}} !!

为什么会这样?请解释一下。

6 个答案:

答案 0 :(得分:8)

这将在Java中打印7x=x++;相当于:

int temp = x;
x = x + 1;  
x = temp;

如果您使用前缀运算符++x,结果会有所不同。

在这里看看你自己:java code; C code

阅读Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)以理解C中的输出。

答案 1 :(得分:6)

在Java中,x=x++被评估为:

int temp = x;
x = x + 1;
x = temp;

因此,在表达式之后基本上没有变化x

但是,在C中,该表达式为Undefined Behaviour。另请参阅Sequence Points Wiki

答案 2 :(得分:5)

此代码在C中导致未定义的行为,因此结果可能是任何,7,8,15或Page fault。为什么这段代码给出7,是编译器问题。

答案 3 :(得分:1)

Java 背景中,出现类似以下内容(对于i = i++语句):

int temp = i; // store current value of i  
i = i + 1; // increase i because of i++  
i = temp; // assign to i  

答案 4 :(得分:1)

x=x++;

这在C中给出任意结果,主要取决于编译器。阅读C中的sequential points。您可以C Programming引用Dennis ritchie

答案 5 :(得分:0)

这是因为运营商的优先权。 = C中的优先级高于Java。