17

考虑以下未格式化的嵌套if-elseJava 代码

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;
}
4

5 回答 5

27

来自Java 语言规范

Java 编程语言,如 C 和 C++ 以及它们之前的许多编程语言,任意规定 else 子句属于它可能属于的最里面的 if。

于 2013-06-18T15:24:50.727 回答
6

块 1 是正确的,在没有括号的 if else 情况下,else 链接到最近的 if

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

是相同的

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

括号也是为了理解水平,方便。在较大的 if else 语句中,没有括号会使错误非常常见

于 2013-06-18T15:19:15.213 回答
4

您可以尝试一下,发现else适用于内部if

http://ideone.com/iBorYi

这是不写这样的代码的一个很好的理由。很难阅读和理解正在发生的事情。

于 2013-06-18T15:18:28.527 回答
0

第 1 块是正确的解释。else 总是属于最近的'if'。(栈顶)

于 2021-09-28T11:51:04.297 回答
0

只需我的 2 美分即可获得更好的视觉效果。

大括号内的所有内容都将被完全忽略。

   if (false) {
        if (true)
            System.out.println("1");
        else
            System.out.println("2");
    }
于 2020-05-20T09:13:06.517 回答