为什么Java仅在while循环的情况下识别无法访问的代码?

Ani*_*kur 4 java loops if-statement unreachable-code

如果我有类似的代码

public static void main(String args[]){
    int x = 0;
    while (false) { x=3; }  //will not compile  
}
Run Code Online (Sandbox Code Playgroud)

编译器将投诉x=3无法访问的代码,但如果我有类似的代码

public static void main(String args[]){
    int x = 0;
    if (false) { x=3; }
    for( int i = 0; i< 0; i++) x = 3;   
}
Run Code Online (Sandbox Code Playgroud)

然后它通过内部代码正确编译if statement,for loop无法访问.为什么java工作流逻辑没有检测到这种冗余?任何用例?

Ego*_*gor 7

Java语言规范中所述,此功能保留用于"条件编译".

JLS中描述的一个例子是你可能有一个常数

static final boolean DEBUG = false;
Run Code Online (Sandbox Code Playgroud)

以及使用此常量的代码

if (DEBUG) { x=3; }
Run Code Online (Sandbox Code Playgroud)

我们的想法是提供一种可能性来改变DEBUGtruefalse轻松而不做任何其他修改代码,如果上面的代码给了一个编译错误,这将是不可能的.