java中的后减量(y--)值
这个问题来自SCJPjava中的后减量(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
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