代码之家  ›  专栏  ›  技术社区  ›  Tom Taylor

以下代码段不会产生预期的结果

  •  1
  • Tom Taylor  · 技术社区  · 6 年前

    我在一个Java编程测试问题中发现了这一点。

    public class Calculator {
      public static void main(String[] args) {
        int i = 0;
        Calculator c = new Calculator();
        System.out.print(i++ + c.opearation(i));
        System.out.print(i);
      }
      public int operation(int i) {
        System.out.print(i++);
        return i;
      }
    }

    执行上面的代码片段可以得到 121 . 我希望是 111 . 我来解释我是怎么解释的。

    + operator precedence ). 所以, c.operation(0) 首先调用并打印值 1 相反,我希望 0 自从 System.out.print 打印的值 i 首先,然后递增i值,因为它是后递增运算符。

    其次 值1返回到main和语句 System.out.print(i++ + 1) 立即执行。从那以后 有post increment运算符,它应该像 0 + 1 并产生了结果 把结果打印出来 2 .

    1个 按预期打印出来。

    简言之,我希望将值打印为 011 但我得到的结果是 . 我不知道我的解释哪里出错了。

    1 回复  |  直到 6 年前
        1
  •  3
  •   xingbin    6 年前

    Additive Operators

    加法运算符具有相同的优先级,并且在语法上 左关联(它们从左到右分组)。


    int i = 0;
    System.out.print(i++ + c.operation(i));
    
    1. 评价 i++ 0 ,和增量 i 1

    2. 通过 i(1) c.operation(i) ,执行 System.out.print(i++) 打印 1个 2 (右操作数)。

    3. i++ + c.operation(i) ---> 0 + 2 , 打印 2个 .

    4. 打印 .