Java中增量运算符的奇怪行为?

1 java

我有一些代码:

int m = 4;
int result = 3 * (++m);
Run Code Online (Sandbox Code Playgroud)

int m = 4;
int result = 3 * (m++);
Run Code Online (Sandbox Code Playgroud)

执行m为5后,结果在第一种情况下为15,但在第二种情况下,m也为5,但结果为12.为什么会这样?它不应该是至少相同的行为?

我特别谈到优先规则.我一直认为这些规则表明,parantheses比一元运算符具有更高的优先级.那么为什么不首先评估这些问题中的表达呢?

Jon*_*eet 7

否 - 因为在第一种情况下,结果是3乘以" m在它增加后的值",而在第二种情况下,结果是3乘以" m在它增加之前的初始值".

这是预增量("增量,表达式的值是增量后的值")和后增量之间的正常差异("记住原始值,然后增加;表达式的值是原始值").

  • @Roflcoptr首先评估parantheses中表达式的事实是不相关的(或实际上是真实的).表达式`(m ++)`的值是`m`,而不是`m + 1`. (2认同)