Java 中运算符的优先级
Precedence of operators in Java
当我运行这个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++
是如何解决的。
表达式 j+++j++
中的第一个 j++
递增 j
和 returns 其先前的值。
第二个 j++
递增 j
和 returns 其先前的值,即第一个 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[0 (i = 1)] = 0 (j = 1) + 1 (j = 2) = 1;
a[1 (i = 2)] = 2 (j = 3) + 3 (j = 4) = 5;
..
当我运行这个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++
是如何解决的。
表达式 j+++j++
中的第一个 j++
递增 j
和 returns 其先前的值。
第二个 j++
递增 j
和 returns 其先前的值,即第一个 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[0 (i = 1)] = 0 (j = 1) + 1 (j = 2) = 1;
a[1 (i = 2)] = 2 (j = 3) + 3 (j = 4) = 5;
..