这个问题来自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.请提供理由
提前致谢
答案 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.
循环结束后,x
和y
都已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。