java while循环中的无法访问的语句

Ayu*_*man 0 java dead-code

虽然在eclipse中找到 "死代码"线程,但这里 死代码警告

我尝试了以下简单的java代码:

public class Test2
{
    public static void main(String[] args)
    {
        int x = 0;        
        while(false)
        {                        
            x=4;
        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

这正确地抛出了编译时错误

C:\Documents and Settings\user\Desktop\Test2.java:7: unreachable
statement
        {                        
        ^ 1 error
Run Code Online (Sandbox Code Playgroud)

我稍微调整了一下代码:

public class Test2
{
    public static void main(String[] args)
    {
        int x =0;        
        while(true)
        {                        
            x=4;
        }
    }
}    
Run Code Online (Sandbox Code Playgroud)

它编译得很好.

有没有理由,为什么编译好?

逻辑上两者都应该导致infiniteloop并且都应该导致编译时错误.

难道我做错了什么?

Boh*_*ian 8

逻辑上两者都应该导致infiniteloop

不完全:while(false)永远不会进入循环.

此外,编译器不会警告无限循环 - 您可能实际上需要一个:

while(true) {
    // poll some queue for work
    // if work found do it
    // else sleep 1 second
}
Run Code Online (Sandbox Code Playgroud)


aio*_*obe 5

有没有理由,为什么编译好?

为什么不编译好?所有语句都可以访问,而不是第一个例子:-)

许多程序故意有无限循环.(想想服务器,例如,应该"永远"为客户服务.)拒绝编译无限循环是没有意义的.

逻辑上两者都应该导致无限循环,并且都应该导致编译时错误.

不,只有第二个应该导致无限循环.

一个while循环继续只要条件为真.因为false永远不会是真的,所以循环体将永远不会被执行(这就是为什么x = 4;在这种情况下无法访问).


请注意,如果你这样做......

public class Test2
{
    public static void main(String[] args)
    {
        int x =0;        
        while(true)
        {                        
            x=4;
        }
        x = 4;     <--------- unreachable!
    }
}    
Run Code Online (Sandbox Code Playgroud)

...它将无法编译,因为循环将永远持续,并且最后一个x = 4;将无法访问.