为什么在JAVA中没有大括号的另一个IF中允许使用IF块

时间:2013-08-10 09:37:21

标签: java if-statement brackets

通常在JAVA中,如果IF语句没有大括号,只能满足IF条件时执行的一行,但是如果另一个IF块(内部IF)跟在初始IF之后,则不会触发错误,还有更多的线条。这怎么可能?

实施例

if (true)
if (true)
   System.out.println("true");
else
   System.out.println("false");

4 个答案:

答案 0 :(得分:5)

没有错误,因为它等于

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

有效的语法。

但请始终使用{}否则,很难理解if块的确切位置。

答案 1 :(得分:2)

那是因为您的外部if块实际上只包含一个语句。

  • 如果内部if条件为真,则外if等同于:

    if (true)
        System.out.println("true");
    
  • 如果内部if条件为false,则相当于:

    if (true)
        System.out.println("false");
    

但是,忽略if-else周围的花括号或者循环是非常糟糕的主意,特别是使用嵌套块执行此操作可能会变坏。仅仅因为它可以做到,并不意味着你应该这样做。

要了解没有大括号的嵌套if块如何变得难看,并且经常导致错误,请考虑此代码,您认为输出应该是什么?

boolean b = true;
boolean b2 = false;

if (b)
    if (true)
       System.out.println("true");
       if (b2)
           System.out.println("Hello");
else
    System.out.println("false");

答案 2 :(得分:2)

  

通常在JAVA中,如果IF语句没有大括号,只能在IF条件满足时执行一行,

校正。没有大括号的if语句只能有一个语句在满足条件时执行。 if的语法类似于

if (<condition>) <statement>; [else <statement>;]

也就是说,如果有else,则它是if的一部分。这是一个声明。

没有错误的原因是因为这里没有歧义。 (好吧,不管怎么说都不是编译器。)由于elseif的一部分,因此它与最接近的if一致。所以通过适当的缩进,你有

if (true)
    if (true)
       System.out.println("true");
    else
       System.out.println("false");

答案 3 :(得分:0)

将此IF声明视为:

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

如果第一个IFtrue它转到下一个语句,那么下一个语句也是IFtrue因此它在其中执行语句。如果假设它是假的,那么它会在else中搜索else结束执行语句。因此,所有语句都被覆盖,并且不会出现错误情况。