【问题标题】:Nested if-else behaviour without braces没有大括号的嵌套 if-else 行为
【发布时间】:2013-06-14 21:12:21
【问题描述】:

考虑以下未格式化的嵌套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;
}

【问题讨论】:

  • 你试过了吗?
  • ...你为什么要在没有大括号的情况下写这个?
  • 我们编写程序供人类理解,总是用大括号编写 if else 语句
  • @all:请不要忘记,有时 SO 问题有时可能是理论上的,出于学术目的等。我同意大括号对于代码可读性至关重要,除了少数情况,但询问 Java行为并不意味着我要编写糟糕的代码(除非我想向codinghorror.com 提交故事)
  • @damo 我相信创造关于 SO 的知识对社区是积极的:如果另一个人有同样的问题,他不必查看 java 文档,但可以通过谷歌搜索找到直接答案(排名很高)

标签: java if-statement syntax


【解决方案1】:

你可以试一试,发现else适用于内层if

http://ideone.com/iBorYi

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

【讨论】:

    【解决方案2】:

    块 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 语句中,没有括号会导致错误很常见

    【讨论】:

      【解决方案3】:

      来自Java Language Specification

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

      【讨论】:

        【解决方案4】:

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

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

           if (false) {
                if (true)
                    System.out.println("1");
                else
                    System.out.println("2");
            }
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-18
          相关资源
          最近更新 更多