此问题已经在这里有了答案:
1: for(int i = 0; i < 10; ) {
2: i = i++;
3: System.out.println("Hello World!");
4: }
我发现的解释是这样:-
循环内的表达式递增i,然后为i分配旧值。因此,i以与循环开头的相同值结束循环:0。循环将无限重复,一次又一次地输出相同的语句,因为在每次循环后我仍然为0。
但是在使用postincrement运算符时,返回的是表达式的原始值,并在返回值之后应用了operator,因此,由于后增运算,应该在评估第1行的测试条件时更新i:-
1: for(int i = 0; i < 10; ) {
2: i = i;
3: i = i + 1; // postincrement update
4: System.out.println("Hello World!");
5: }
表达式i = i++
的顺序如下:
i++
是一个表达式,其计算结果为i
的未增加的值。
i++
具有增加i
的副作用。这种增加发生在紧接任务之前。
但是由于分配了表达式i
的值,因此i
重置为i++
的未增加的值。
它运行无尽,因为0 + 0为0。如果您使用正确,它将是>
1: for(int i = 0; i < 10; ) { 2: i++; 3: System.out.println("Hello World!"); 4: }
wich是0 +1,依此类推。