java中的后递减(y - )值

时间:2014-03-06 17:21:38

标签: java scjp

这个问题来自SCJP

int x = 0; 
int y = 10; 

do {
    y--;        
    ++x; 
} while (x < 5); 

System.out.print(x + "," + y);

结果是什么?

一个。 5,6

B中。 5,5

℃。 6,5

d。 6,6

答案是B

但我想知道为什么它不是A.因为我们知道在减少之后(y--),价值与减少之前的数字相同,即6.请提供理由

提前致谢

4 个答案:

答案 0 :(得分:2)

在执行该行之后,发布和预先减少实际上都会降低变量的值。 说我们有这个:

int x = 10, y = 10;
x++; //After this line, x = 11
++y; //After this line, y = 11

System.out.println("x = " + x + " y = " + y);

有了这个,我们得到x = 11 y = 11作为输出。

差异:
post和pre减量之间的差异是,使用1,post减量,实际的减量在评估变量之后出现。 如果我们有以下内容:

int x = 10;
System.out.println("x = " + x--);

我们会输出x = 10

通过预递减,实际递减
评估变量之前发生。如果我们有以下内容:

int x = 10;
System.out.println("x = " + --x);

我们会输出x = 9

答案 1 :(得分:1)

是的,表达式y--的值是旧值,但该值立即被丢弃。在循环结束后打印时,y的值已经更改为5

循环的最后一次迭代。

y--;  // Value is 6, but y is changed to 5.
++x;  // Value is 5, x is changed to 5.

循环结束后,xy都已5。因为你没有对表达式做任何事情,所以你在这里使用预增量/减量或后增量/减量实际上并不重要。结果是相同的,因为值在System.out.print语句中引用之前就已更新。

答案 2 :(得分:0)

按照代码:

1 Loop: y = 9, x = 1
2 Loop: y = 8, x = 2
3 Loop: y = 7, x = 3
4 Loop: y = 6, x = 4
5 Loop: y = 5, x = 5

就是这样。在5循环x = 5中,所以do while break。

答案 3 :(得分:0)

y--的值不会保持不变。前加/减后的唯一区别是评估表达式的值,所以:

int y = 0;
int a = ++y; //a = 1, y = 1
int b = y--; //b = 1, y = 0

所以,现在循环之后你会看到为什么B。