java中的后减量(y--)值

java中的后减量(y--)值,java,scjp,Java,Scjp,这个问题来自SCJP int x = 0; int y = 10; do { y--; ++x; } while (x < 5); System.out.print(x + "," + y); intx=0; int y=10; 做{ y--; ++x; }而(x

这个问题来自SCJP

int x = 0; 
int y = 10; 

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

System.out.print(x + "," + y);
intx=0;
int y=10;
做{
y--;
++x;
}而(x<5);
系统输出打印(x+“,”+y);
结果如何

A.5,6

B.5,5

C.6,5

D.6,6

答案是B

但我想知道为什么不是A。因为我们知道在后减量(y-)之后,值仍然与减量之前相同,即6。请提供一个理由

提前感谢

遵循以下代码:

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中断。

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

循环的最后一次迭代

y--;  // Value is 6, but y is changed to 5.
++x;  // Value is 5, x is changed to 5.
循环结束后,
x
y
都已
5
。因为您没有对表达式做任何操作,所以实际上在这里使用的是预递增/递减还是后递增/递减都无关紧要。结果是相同的,因为在
System.out.print
语句中引用这些值之前,这些值会被更新。

y的值不会保持不变。前后inc/减量之间的唯一区别是计算表达式的值,因此:

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

因此,现在按照循环,您将看到为什么B.

Post和pre-decreation实际上都会在执行该行后减小变量的值。 假设我们有:

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=11y=11
作为输出。

区别:
后减量和前减量之间的区别在于,对于后减量,实际的减量发生在变量计算之后。 因此,如果我们具备以下条件:

int x = 10;
System.out.println("x = " + x--);
int x = 10;
System.out.println("x = " + --x);
我们将得到
x=10
输出。

使用预减量,实际的减量发生在评估变量之前。因此,如果我们具备以下条件:

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

我们将得到
x=9
输出。

可能的重复我不认为这个问题与post或pre递增或递减有任何关系,只需遵循逻辑即可。增量和减量在它们自己的行上,因此它们只会发生,而不考虑此处的任何其他代码行。您可以使用
--y
x++
在此处仍然得到相同的答案。结果是循环后的结果。在第一个循环之后,y=9