- for(; ;);{
- System.out.println("hello");
- }
复制代码 如上代码
编译时,编译器能判断出 for(;;); 是一个完整的for循环,但是也是一个死循环,此时后面的代码快{System.out.println("hello");}就永远不会执行到,此时报错是报 unreachable错误。- int i=2;
- while (i>1);{
- System.out.println("World");
- }
复制代码 如上代码
编译时,局部变量还没有被赋值(代码编译后运行时才赋值为2),所以,编译器是无法判断while (i>1);是否是死循环,编译器编译的时候认为后面的代码块{System.out.println("World");}有可能会被执行到,所以编译不报错;
运行时,由于i已被赋值为2,while (i>1);是一个死循环,所以后面的代码块不会被执行到,jvm会卡死无响应,除非手动停止进程。
|