一元增量运算符的疯狂

问题描述

谁能给我一种调试以下示例的方法

public class Example1 {
    public static void main(String[] input) {
        int i = 0;
        // i = i++ + i++;        // prints 1
        // i = i++ + i++ + i++;  // prints 3
        i = i++ + i-- + i++;     // prints 1
        System.out.print(i);
    }
}

由于每个示例都是一行代码,因此使用调试不是解决方案...我正在尝试在 Java OCA 8 考试中使用这样的代码

感谢您的帮助

解决方法

让我们分解你的第一个例子:

int i = 0;
i = i++ + i++;

第一个 i++ 的计算结果为 0i 的新值现在是 1。第二个 i++ 的计算结果为 1i 的新值现在是 2。接下来是两个后缀增量表达式的相加:0 + 1 = 1。最后,您将此总和分配给 i,用总和的结果 (2 覆盖其临时值 (1) }}).

其他示例非常相似,我让 OP 自己完成它们。

,

很简单,只要记住后增一元运算符是先使用前一个值再自增,所以下次使用时,自增后的值就变成前一个值,以此类推。

考虑这个简单的例子;

i = 0;
j = 2 + i++; 
// j = 2 + 0 (previous value of i) i.e. 2 BUT
// i is now 0 + 1 i.e. 1 (new value of i)
System.out.println(i); // This will now print 1.