int result = 5;
result = result--;
System.out.println(result);
为什么结果等于 5?
因为表达式result--
的值是减量result
前的值。然后result
递减,最后将表达式的值分配给result
(覆盖递减)。
这什么都不做:
result = result--;
因为result--
在递减之前返回结果的值(相反,--result
在递减之后返回结果的值)。并且由于右侧的部分在=
之前执行=
,因此您基本上会减少结果,然后在同一行上将结果设置为减少之前的值,从而在实践中取消它。
所以你可以写
result = --result;
但是,如果您想减少结果,只需执行
result--;
(或者--result;
但是单独使用它是非常不寻常和非典型的,当您不想使用表达式的结果而只是想递减时不要这样做)
非常有效的问题!
您的代码不起作用,因为result--
仅在替换之后执行=
。如果您使用前缀运算符,您的代码将起作用:
result = --result;
但是,这没有任何意义,因为您可以简单地编写:
--result;
有关更详尽的解释,请参阅有关前缀/后缀运算符如何在 Java 上工作的问题/答案。
这是令人困惑的结构。它与
int tmp = result;
result--;
result = tmp;
您正在使用后减运算符。这是因为你在写result--
但不是--result
。表达式的值result--
是 的副本result
,它是在递减之前定义的。这就是为什么它被称为后减量。
result--
定义表达式的值后,result
递减。但是:在此之后,表达式 ( )result
的值将覆盖 5 的值。result--
result = 5
result-- 是 post decrement .. 这意味着该值首先分配给 result 然后递减。
您可能会发现此答案很有帮助。
我相信你想要做的是:
int result = 5;
result--;
System.out.println(result);
更改为前缀增量以获得所需的结果,或删除赋值语句:
int result = 5;
result = --result;
System.out.println(result);
尝试
结果=--结果;它将打印 4,您将了解 c-- 和 --c 之间的差异是什么