【问题标题】:Unary increment operator madness一元增量运算符疯狂
【发布时间】:2021-05-08 03:13:32
【问题描述】:

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

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 考试。

感谢您的帮助

【问题讨论】:

    标签: java post-increment pre-increment


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这很清楚,所以 i = i++ + i++ + i++ => 0 + 1 + 2
    • @FrancescoDassisis 是的,完全正确!
    【解决方案2】:

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

    考虑这个简单的例子;

    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.
    

    【讨论】:

    • 是的,但为什么 i = i++ + i++; // 打印 1... 它应该打印 2 对吗?
    • 分解它。对于第一个 i++,使用 i = 0 并增加下一个操作的值,即再次 i++。对于第二个 i++,当前值为 1,因此总和变为 0 + 1 = 1。现在,如果您在此之后有另一个涉及“i”的操作,那将继续使用值“2”。
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多