Java: Beware of accidental semicolons in while and for loops!

The following code…

while(cond); {
    // ...

…is actually interpreted as

    ; // <-- loop body!

    // Separate block statement, not part of the loop!

This is because ; is treated as a no-op statement, and braces are optional if the loop body consists of a single statement.

This can have catastrophic consequences, since the block statement is only executed once.

Example: Program enters an infinite loop since i++ is never executed

int i = 0;
while (i < 10); {

Same issue applies for for loops.

Example: "Hello" printed once since the print statement is not part of the loop body

for (int i = 0; i < 10; i++); {


Be the first to comment!