Java中的For循环永远运行

时间:2018-06-26 06:43:59

标签: java post-increment

问这个有趣的问题。我知道职位增加和预先增加。

public  static void main(String[] args){
   for (int i=0; i<10 ;){
   i=i++;
   System.out.println(i);
   }
}

输出:

0
0
0
0

这段代码可以永远运行,简而言之,这是一个无限循环,从技术上讲,当我们看到分配了i并进行后期递增操作时,作用域就在循环内,即使它是后期增加,它应该增加实际的i,并且这不会永远运行。我想从专家那里得到一些有趣的解释。

5 个答案:

答案 0 :(得分:12)

我们总是知道i++返回i然后递增。但是,这并非完全正确。在执行操作之后,总是返回一个值。因此,i++真正要做的是先递增1,然后返回递增之前i的值。因此,i=i++将首先递增i,然后将其重新设置为递增之前的值。

答案 1 :(得分:8)

问题出在那儿:

i=i++

i++已经在增加变量。您正在做的事情是在递增之前将i的值设置为自己的值。

记录下来,如果您使用过i = ++i,它会起作用,但这没用。

答案 2 :(得分:2)

您可以更改为任意一个

for (int i=0; i<10 ;i++){
   System.out.println(i);
}

for (int i=0; i<10 ;){
   i++;
   System.out.println(i);
}

for (int i=0; i<10 ;){
   i = i + 1;
   System.out.println(i);
}

答案 3 :(得分:1)

i=i++

int tmp = i;

i+=1;

i=tmp;

答案 4 :(得分:1)

这里所有都是关于操作的优先级。 后缀递增优先级更高,但递增之前会保存旧值,而inrement之后会保存旧值。在i递增之后,但是返回了旧值,因此您再次将其分配给i