因为当你吧判断条件设置为while(a>0)时,编译器是不知道你的判断条件是否会导致System.out.println("永远执行不到我");永远无法执行,因为a在运行时是可变的,一旦a发生变化小于0了就能停下了,所以编译能通过。而当你用while(true)的话,这个循环是停不下的,编译器就能检测出这是个死循环,会导致这个循环外的代码无法运行,所以编译器不允许这样的代码出现。
简单点比喻就是用while(a>0)时,编译器觉得还有希望能跳出死循环,所以通过了。
而用while(true)的话编译器就一点希望也看不到能跳出死循环,所以编译失败。 |