Java 为什么我会先发生?

Java 为什么我会先发生?,java,Java,我尝试了下面的代码,结果是{2,3,3}。我无法解释为什么第一个元素的值被更改。我想这是锯齿效应,但很混乱 int[] arr = new int[] { 1, 2, 3 }; int i = 0; while (i < arr.length - 1) { arr[i++] = arr[i]; } i = 0; while (i < arr.length) { System.out.println(arr[i]); i++; } 第一个元素的值更改为第二个元

我尝试了下面的代码,结果是{2,3,3}。我无法解释为什么第一个元素的值被更改。我想这是锯齿效应,但很混乱

int[] arr = new int[] { 1, 2, 3 };
int i = 0;
while (i < arr.length - 1) {
    arr[i++] = arr[i];
}
i = 0;
while (i < arr.length) {
    System.out.println(arr[i]);
    i++;
}

第一个元素的值更改为第二个元素的值,因为行arr[i++]=arr[i];实际上是这样执行的:

arr[0]=arr[1]

这意味着数组的第一个值设置为数组的第二个值,从数组的0开始,在本例中为2。++运算符仅在第一次将计数器用作实际值后才增加计数器,而不增加计数器

在通过第一个while循环的第一个循环之后,数组如下所示:[2,2,3],i为1,然后执行arr[1]=arr[2],这将数组更改为:[2,3,3],i为2
这就是最终结果。

如果我们通过第一个循环arr.length=3

first: i < 3 - 1 : 0 < 2 => true
arr[0] (increments i, i is now 1) = arr[1] =>  arr[0] = 2;
arr is now {2, 2, 3}

second time in loop: i < 3 - 1 : 1 <  2 => true
arr[1] (increments i, i is now 2) = arr[2] => arr[1] = 3
arr is now {2, 3, 3}

third loop check: i < 3 - 1 : 2 < 2: false; exit while loop;

Print out array: {2, 3, 3}

你说的别名效应是什么意思?我无法解释结果。我知道我的想法可能是错误的,所以在这里等待正确的解释。为什么我不能等待那一行的结束?我认为这是一个命令,我可以在命令执行后递增。I的递增发生在使用I++之后。因此,首先访问位置i处的数组,然后递增,在语句的第二部分中访问位置i+1处的数组。也值得参考,为什么递增不能等待该行的结束?我认为这是一个命令,我可以在命令执行后增加