Why Java identifies unreachable code only in case of while loop?

if-statement, java, loops, unreachable-code

Solution

As described in Java Language Specification, this feature is reserved for "conditional compilation".

An example, described in the JLS, is that you may have a constant

static final boolean DEBUG = false;

and the code that uses this constant

if (DEBUG) { x=3; }

The idea is to provide a possibility to change `DEBUG` from `true` to `false` easily without making any other changes to the code, which would not be possible if the above code gave a compilation error.

Problem

If I have code like ``` public static void main(String args[]){ int x = 0; while (false) { x=3; } //will not compile } ``` compiler will complaint that `x=3` is unreachable code but if I have code like ``` public static void main(String args[]){ int x = 0; if (false) { x=3; } for( int i = 0; i< 0; i++) x = 3; } ``` then it compiles correctly though the code inside `if statement` and `for loop` is unreachable. Why is this redundancy not detected by java workflow logic ? Any usecase?

Original source

Related problems