If I try to compile
for(;;)
{
}
System.out.println(\"End\");
The Java compiler produces an error saying Unreachable statement
The behaviour is defined in the JLS description of unreachable statements:
The then-statement is reachable iff the if-then statement is reachable.
So the compiler determines that the then-statement (break;) is reachable, regardless of the condition in the if.
And a bit further, emphasis mine:
A basic
forstatement can complete normally iff at least one of the following is true:
- The for statement is reachable, there is a condition expression, and the condition expression is not a constant expression (§15.28) with value true.
- There is a reachable
breakstatement that exits the for statement.
So the for can complete normally because the then-statement contains a break. As you noticed, it would not work if you replaced break with return.
The rationale is explained towards the end of the section. In substance, if has a special treatment to allow constructs such as:
if(DEBUG) { ... }
where DEBUG may be a compile time constant.