Por que o Java identifica código inacessível apenas no caso do loop while? [duplicado

Esta pergunta já tem uma resposta aqui:

if (false) vs. while (false): código inacessível vs. código morto 2 respostas

Se eu tiver código como

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

compiler irá reclamar quex=3 é código inacessível, mas se eu tiver um código como

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

; então, compila corretamente o código dentro deif statement efor loop é inalcançavel. Por que essa redundância não é detectada pela lógica do fluxo de trabalho java? Algum caso de uso?

questionAnswers(3)

yourAnswerToTheQuestion