如何确定else属于哪个if语句?

时间:2015-01-19 09:04:42

标签: java if-statement semantics

我写了下面的代码,让自己感到困惑。

if(condition1)
    if(condition2){
        doStuff()
    }
else {
    doOtherStuff();
}

当它像这样缩进时,看起来其他属于condition1 if。但是如果我们改变一些空格,看起来它就是条件2的一部分,如果是这样的话:

if(condition1)
    if(condition2){
        doStuff()
    } else {
        doOtherStuff();
    }

那它属于哪个?我为条件1添加了括号,以便更清楚,但哪一个是正确的?

3 个答案:

答案 0 :(得分:3)

它属于 condition2 if声明。

原因在于,由于 condition1 if语句用括号({})包裹它的正文,它假设它的正文包含一个语句。查看 condition2 if语句(包括else),它是一个有效的(if/else)语句,因此它被视为单件。

如果你想让else属于外if,你必须将第一个的主体包在括号中。

if (condition1) {
    if (condition2) {

    }
} else {
   doOtherStuff();
}

一般来说,使用括号({})包装条件结构和循环的主体总是是好的做法(即使它们包含单个嵌套语句),因为代码变得更易读和可维护。

答案 1 :(得分:0)

它属于condition2。如果您想将其归属于condition1,则必须使用括号

if(condition1) {
    if(condition2){
        doStuff()
    }
} else {
    doOtherStuff();
}

答案 2 :(得分:0)

你是对的,它与最后的那个匹配,即你的内心if。如果你想让其他部分与外部if相关联,你应该明确地使用大括号,如:

if(condition1) {
    if(condition2){
        doStuff()
    } 
} else {
    doOtherStuff();
}