5
int result = 5;    
result = result--;  
System.out.println(result);  

为什么结果等于 5?

4

8 回答 8

15

因为表达式result--的值是减量result 前的值。然后result递减,最后将表达式的值分配给result(覆盖递减)。

于 2012-06-18T16:11:34.423 回答
14

这什么都不做:

   result = result--;  

因为result--在递减之前返回结果的值(相反,--result在递减之后返回结果的值)。并且由于右侧的部分在=之前执行=,因此您基本上会减少结果,然后在同一行上将结果设置为减少之前的值,从而在实践中取消它。

所以你可以写

   result = --result;  

但是,如果您想减少结果,只需执行

result--; 

(或者--result;但是单独使用它是非常不寻常和非典型的,当您不想使用表达式的结果而只是想递减时不要这样做)

于 2012-06-18T16:11:51.367 回答
5

非常有效的问题!

您的代码不起作用,因为result--仅在替换之后执行=。如果您使用前缀运算符,您的代码将起作用:

result = --result;

但是,这没有任何意义,因为您可以简单地编写:

--result;

有关更详尽的解释,请参阅有关前缀/后缀运算符如何在 Java 上工作的问题/答案

于 2012-06-18T16:11:44.657 回答
4

这是令人困惑的结构。它与

int tmp = result;
result--;  
result = tmp;
于 2012-06-18T16:12:56.653 回答
3

您正在使用后减运算符。这是因为你在写result--但不是--result。表达式的值result--是 的副本result,它是在递减之前定义的。这就是为什么它被称为减量。

result--定义表达式的值后,result递减。但是:在此之后,表达式 ( )result的值将覆盖 5 的值。result--result = 5

于 2012-06-18T16:16:14.220 回答
2

result-- 是 post decrement .. 这意味着该值首先分配给 result 然后递减。

您可能会发现此答案很有帮助。

我相信你想要做的是:

int result = 5;     
result--; 
System.out.println(result);  
于 2012-06-18T16:14:08.183 回答
0

更改为前缀增量以获得所需的结果,或删除赋值语句:

int result = 5;
result = --result;
System.out.println(result);
于 2012-06-18T16:15:28.563 回答
0

尝试

结果=--结果;它将打印 4,您将了解 c-- 和 --c 之间的差异是什么

于 2012-06-18T16:16:02.630 回答