“x = x ++”后的x是什么?
执行此操作后会发生什么(幕后)?
int x = 7;
x = x++;
也就是说,当一个变量在一个语句中增加后分配给自己? 我编译并执行了这个。 即使在整个陈述之后, x
仍然是7。 在我的书中,它说x
增加了!
x
确实增加了。 但是你将x
的旧值重新分配给自己。
x = x++;
x++
递增x
并返回其旧值。 x =
将旧值重新分配给自己。
所以最后, x
被赋值回它的初始值。
x = x++;
相当于
int tmp = x;
x++;
x = tmp;
该声明:
x = x++;
相当于:
tmp = x; // ... this is capturing the value of "x++"
x = x + 1; // ... this is the effect of the increment operation in "x++" which
// happens after the value is captured.
x = tmp; // ... this is the effect of assignment operation which is
// (unfortunately) clobbering the incremented value.
简言之,该声明不起作用。
关键点:
后缀增量/减量表达式的值是增量/减量发生前操作数的值。 (在前缀形式的情况下,该值是该操作之后的操作数的值)
在将值分配给LHS之前,赋值表达式的RHS将被完全评估(包括任何增量,减量和/或其他副作用)。
请注意,与C和C ++不同,Java中表达式的评估顺序是完全指定的,并且没有平台特定变体的空间。 只有当编译器不会从当前线程的角度更改执行代码的结果时,才允许对操作进行重新排序。 在这种情况下,编译器将被允许优化整个语句,因为它可以证明它是无操作的。
如果它不是很明显:
希望像FindBugs和PMD这样的代码检查工具将这样的代码标记为可疑。
链接地址: http://www.djcxy.com/p/72203.html