我的代码是:
code(){
int x=7;
x=x++;
output x; //prints 8 in C, prints 7 in Java
}
伙计们上面的代码:打印8
在,C
和!7
Java
为什么会这样?请解释。
7
这将在 Java 中打印。x=x++;
相当于:
int temp = x;
x = x + 1;
x = temp;
如果您使用前缀运算符 , ,结果会有所不同++x
。
阅读任何人都可以解释这些未定义的行为(i = i++ + ++i、i = i++ 等)以理解 C 中的输出。
在 Java 中,x=x++
, 被计算为:
int temp = x;
x = x + 1;
x = temp;
所以,基本上没有变化是x
在那个表达之后。
但是C
,该表达式是Undefined Behavior。另请参阅序列点 Wiki
此代码在 C 中导致未定义的行为,因此结果可能是任何 7、8、15 或页面错误。为什么这段代码给出 7,是编译器的问题。
在Java背景中,会发生类似以下的事情(对于i = i++
语句):
int temp = i; // store current value of i
i = i + 1; // increase i because of i++
i = temp; // assign to i
x=x++;
这在 C 中给出了任意结果,主要取决于编译器。阅读C 中的内容。sequential points
您可以参考C Programming
.Dennis ritchie
这是因为运算符优先级。= 在 C 中的优先级高于 Java。