执行while循环时,java会不断检查参数是否为真?例如,如果while循环是
while(k=7) {
Thread.sleep(5000);
}
但是在5秒内另一个线程将k更改为8,循环会继续等待还是立即退出?
答案 0 :(得分:6)
答案 1 :(得分:5)
没有。即使k
是易变的(或者更糟糕的是,从另一个线程改变而没有让它变得不稳定;坏主意)或者一个对象的属性可以通过循环内部调用的方法改变,它只会在最后检查循环体,决定重复身体或继续经过循环。
您可以通过中断线程并将循环置于循环外部,或使用内部检查和break
来打破循环。
答案 2 :(得分:2)
条件在开始时检查一次,如果输入循环,则在每次迭代执行主体后执行。所以不,即使在执行正文时k
被更改,它也不会立即退出。
哦,你可能意味着k == 7
(回想==
在=
分配时进行比较)。有些人甚至会写7 == k
以避免可能犯这个错误。
这与线程没有多大关系。例如,考虑:
int k = 7;
while (k == 7) {
k = 8;
System.out.println("here!");
}
here!
注意即使k
立即更改为不再满足循环条件的值,主体仍然完全执行。