Java 前和 post。不生效?
Pre and post on Java. Not taking effect?
int x = 12;
int y = 15;
while (y >= 0)
{
x = x--;
y = --y;
}
System.out.print(x);
这打印出 12,我猜 x 永远不会改变,因为它在 post (x--) 生效之前存储,但为什么 x-- 永远不会生效?
--
in x--
确实生效了。但是,您看不到它,因为您将预递减 x
的值重新分配给 x
.
以下是当您执行 x = x--
:
时会发生的情况
x
的值被存储到临时 space(例如,tempX
)
x
减一
- 新值被分配回
x
- 一旦右边完成计算,
tempX
被分配回x
这会产生 x
未更改的整体效果。
y = --y
的效果不同,因为表达式--y
的值和y
减后的值一样,所以整体效果和--y
.
简而言之,x = x--;
执行以下操作:
- 加载变量
x
到操作数栈(值为12
)。
- 减
x
,它的值现在是11
.
- 将步骤 1 中加载的值存储回
x
==> x
返回 12
。
int x = 12;
int y = 15;
while (y >= 0)
{
x = x--;
y = --y;
}
System.out.print(x);
这打印出 12,我猜 x 永远不会改变,因为它在 post (x--) 生效之前存储,但为什么 x-- 永远不会生效?
--
in x--
确实生效了。但是,您看不到它,因为您将预递减 x
的值重新分配给 x
.
以下是当您执行 x = x--
:
x
的值被存储到临时 space(例如,tempX
)x
减一- 新值被分配回
x
- 一旦右边完成计算,
tempX
被分配回x
这会产生 x
未更改的整体效果。
y = --y
的效果不同,因为表达式--y
的值和y
减后的值一样,所以整体效果和--y
.
简而言之,x = x--;
执行以下操作:
- 加载变量
x
到操作数栈(值为12
)。 - 减
x
,它的值现在是11
. - 将步骤 1 中加载的值存储回
x
==>x
返回12
。