问这个有趣的问题。我知道职位增加和预先增加。
public static void main(String[] args){
for (int i=0; i<10 ;){
i=i++;
System.out.println(i);
}
}
输出:
0
0
0
0
这段代码可以永远运行,简而言之,这是一个无限循环,从技术上讲,当我们看到分配了i
并进行后期递增操作时,作用域就在循环内,即使它是后期增加,它应该增加实际的i
,并且这不会永远运行。我想从专家那里得到一些有趣的解释。
答案 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
。