我需要一些代码:
int m = 4;
int result = 3 * (++m);
和
int m = 4;
int result = 3 * (m++);
执行m为5,结果在第一种情况下为15,但在第二种情况下,m也是5,但结果是12.为什么会这样?它不应该至少是相同的行为吗?
我特别谈到优先规则。我一直认为这些规则表明,parantheses比一元运算符具有更高的优先级。那么,为什么首先评估的这些表达式是不是?
答案 0 :(得分:7)
否 - 因为在第一种情况下,结果是3乘以“m
增加后的值”,而在第二种情况下,结果是3乘以“m
的初始值”在它增加之前“。
这是预增量(“增量,表达式的值是增量后的值”)和后增量之间的正常差异(“记住原始值,然后增加;表达式的值是原来的一个“)。
答案 1 :(得分:3)
不同之处在于将结果分配给m。 在第一种情况下,你基本上(不是它真正做的,但有助于理解)......
int result = 3 * (m=m+1);
在第二种情况下,你有
int result = 3 * m; m = m +1;
答案 2 :(得分:1)
将其视为“增量和获取”以及“获取和增加”。例如,请参阅AtomicInteger
,其中包含incrementAndGet()和getAndIncrement()方法。
答案 3 :(得分:1)
这是运算符的定义:m++
计算结果为m
,然后递增m
。这是一个“后增量”。它周围的括号不会改变运算符求值变量的事实,并且之后也会增加它。