考虑:
int m = 2, n;
n = m++ + (++m);
Run Code Online (Sandbox Code Playgroud)
在C输出是:
m = 4, n = 4;
Run Code Online (Sandbox Code Playgroud)
在Java中输出是:
m = 4, n = 5;
Run Code Online (Sandbox Code Playgroud)
这是怎么发生的?
它可能不同,因为C不允许正确的程序包含这样的表达式--C不定义此类程序的行为.这使得C编译器在解释这些表达式方面有很大的自由度.
Java通过定义像这样的表达式的预期行为来更严格地约束实现.
(在C中断的规则是表达式可能不会在没有插入序列点的情况下多次修改对象的值).