Skip to content

Nested if-else behaviour without braces

Consider the following unformatted nested if-else Java code

if (condition 1)
if (condition 2)
action 1;
else
action 2;

My question is: according to the Java language specifications, to what if does the else branch apply?

By hand-reformatting and adding braces, which of these two is correct?

Block 1:

if (condition 1) {
    if (condition 2) {
        action 1;
    } else
        action 2;
    }
}

Block 2:

if (condition 1) {
    if (condition 2) {
        action 1;
    }
}
else {
    action 2;
}

Answer

From the Java Language Specification:

The Java programming language, like C and C++ and many programming languages before them, arbitrarily decrees that an else clause belongs to the innermost if to which it might possibly belong.