Вложенное поведение if-else без фигурных скобок

Рассмотрим следующий неформатированный вложенный if-else Java-код

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

Мой вопрос: согласно спецификациям языка Java, к чему, если применяется ветвь else?

Ручным переформатированием и добавлением фигурных скобок, какая из этих двух правильных?

Блок 1:

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

Блок 2:

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

Ответ 1

Из документации:

Язык программирования Java, такой как C и С++, и многие языки программирования перед ними, произвольно декретирует, что предложение else принадлежит самому внутреннему, если оно может принадлежать.

Ответ 2

Вы можете попробовать и найти, что else применяется к внутреннему if:

http://ideone.com/iBorYi

Это хорошая причина не писать такой код. Очень трудно читать и понимать, что происходит.

Ответ 3

Блок 1 правильный, если в других ситуациях без скобок else привязан к ближайшему, если

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

совпадает с

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

также скобки предназначены для понимания уровня и легкости. В более крупных выражениях if else без скобок делает ошибку очень распространенной