Java中运算符的优先级

Java中运算符的优先级,java,operator-precedence,Java,Operator Precedence,当我运行此Java代码时: int[] a = new int[10]; int i = 0,j = 0; while(i < 10){ a[i++] = j+++j++; } System.out.println(Arrays.toString(a)); int[]a=新的int[10]; int i=0,j=0; 而(i

当我运行此Java代码时:

int[] a = new int[10];
    int i = 0,j = 0;
    while(i < 10){
        a[i++] = j+++j++;
    }
    System.out.println(Arrays.toString(a));
int[]a=新的int[10];
int i=0,j=0;
而(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++
是如何解析的。

表达式
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;
...

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


它像
a[i++]=(j++++)(j++)那样绑定。解决方法是用程序员管理工具(又称大棒:-)敲打程序员的头部。说真的,如果你不写这样糟糕的代码,那么你就不需要知道它的意思。如果是别人写的。。。。拿出前面提到的项目管理工具。这不是操作员优先权问题。这是一个何时评估副作用的问题。
a[0 (i = 1)] = 0 (j = 1) + 1 (j = 2) = 1;
a[1 (i = 2)] = 2 (j = 3) + 3 (j = 4) = 5;
..