Java: Prefix/postfix of increment/decrement operators?
从下面或这里的程序中,为什么最后一次调用
1 2 3 4 5 6 7 8 9 10 11 12 |
1 2 |
这将打印出"6",因为它需要我向它添加一个并返回值。5+1=6;这是预混,在操作中使用之前添加到数字。
1 2 |
这会打印出"6",因为它需要i,存储一个副本,添加1并返回副本。所以你得到了我的值,但同时也增加了它。因此,您打印出旧值,但它会递增。后缀增量的美。
然后,当您打印出i时,它会显示i的实际值,因为它是递增的。七
我知道这个问题已经得到了解答,但我认为另一种解释可能会有所帮助。
另一种解释方法是:
一种思考的方法是,在表达式中做一些其他的事情。当您打印
1 2 | int i = 1; result i = ++i * 2 // result = 4, i = 2 |
在计算结果之前,对
1 | result i = i++ * 2 // result = 2, i = 2 |
计算结果后,对
1 2 |
如果保持一致的图案并包含所有值的打印行:
1 2 3 4 5 6 7 8 9 |
把
在
但是,如果
看看这里的代码。
1 2 3 4 5 6 7 8 9 | int i = 0; while(i < 10){ System.out.println(i); i = increment(i); } private int increment(i){ return i++; } |
这将导致不结束的循环。因为
为什么不更新变量?
- 后缀:将i的当前值传递给函数,然后将其递增。
- 前缀:增加当前值,然后将其传递给函数。
你对我什么都不做的台词没有区别。
请注意,对于分配,这也是正确的:
1 2 3 | i = 0; test = ++i; // 1 test2 = i++; // 1 |
1 |
这会将我在这行代码(6)之前的值发送给
它为最后一条语句打印7,在上面的语句中是cos,它的值是6,当最后一条语句被打印时,它增加到7。
这是我的答案。你们中的一些人可能会觉得很容易理解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package package02; public class C11PostfixAndPrefix { public static void main(String[] args) { // In this program, we will use the value of x for understanding prefix // and the value of y for understaning postfix. // Let's see how it works. int x = 5; int y = 5; Line 13: System.out.println(++x); // 6 This is prefixing. 1 is added before x is used. Line 14: System.out.println(y++); // 5 This is postfixing. y is used first and 1 is added. System.out.println("---------- just for differentiating"); System.out.println(x); // 6 In prefixing, the value is same as before {See line 13} System.out.println(y); // 6 In postfixing, the value increases by 1 {See line 14} // Conclusion: In prefixing (++x), the value of x gets increased first and the used // in an operation. While, in postfixing (y++), the value is used first and changed by // adding the number. } } |
也许您可以用这个例子更好地理解前缀/后缀。
1 2 3 4 5 6 7 8 9 10 |
我们可以用临时变量来考虑它。
1 2 3 | i =3 ; i ++ ; // is equivalent to: temp = i++; and so , temp = 3 and then"i" will increment and become i = 4; System.out.println(i); // will print 4 |
现在,
1 2 |
等于
1 2 | temp = i++; // temp will assume value of current"i", after which"i" will increment and become i= 4 System.out.println(temp); //we're printing temp and not"i" |