【问题标题】:Precedence of operators in Java [duplicate]Java中运算符的优先级[重复]
【发布时间】:2015-10-07 21:48:28
【问题描述】:

当我运行这个 Java 代码时:

int[] a = new int[10];
    int i = 0,j = 0;
    while(i < 10){
        a[i++] = j+++j++;
    }
    System.out.println(Arrays.toString(a));

我得到输出:[1, 5, 9, 13, 17, 21, 25, 29, 33, 37]。 有人可以解释一下声明a[i++] = j+++j++是如何解决的。

【问题讨论】:

  • 它像a[i++] = (j++) + (j++);一样绑定。
  • 解决方法是用程序员管理工具(又名大棒 :-))敲打程序员的脑袋。说真的,如果你不写那样糟糕的代码,那么你就不需要知道它的含义。如果是其他人编写的……请使用上述项目管理工具。
  • 不是运算符优先级问题。这是何时评估副作用的问题。

标签: java operator-precedence


【解决方案1】:

表达式j+++j++ 中的第一个j++ 递增j 并返回其先前的值。

第二个j++ 递增j 并返回其先前的值,即第一个j++ 递增后的值。

在下一次迭代开始时,j 比上一次迭代开始时的值大两倍(因为上一次迭代增加了 j 两次)。

因此:

a[0] = 0++ + 1++ = 0 + 1 = 1;
a[1] = 2++ + 3++ = 2 + 3 = 5;
a[2] = 4++ + 5++ = 4 + 5 = 9;
...

【讨论】:

    【解决方案2】:

    将是a[i++] = j++ + j++;
    i++ 转换为 使用 i 然后递增 i

    a[0 (i = 1)] = 0 (j = 1) + 1 (j = 2) = 1;
    a[1 (i = 2)] = 2 (j = 3) + 3 (j = 4) = 5;
    ..
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 2021-10-25
      • 2016-06-17
      • 1970-01-01
      • 2011-12-28
      相关资源
      最近更新 更多