2

Normally in JAVA if an IF statement doesn't have curly brackets can have only one line that is executed when IF condition is met, however if another IF block (inner IF) follows the initial IF, then no error is triggered and there are more lines. How is this possible?

Example

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

4 回答 4

5

没有错误,因为它等于

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

和一个有效的语法。

但是请始终使用 {} 其他方式,很难理解if块的确切结束位置。

于 2013-08-10T09:38:35.180 回答
2

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

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

    if (true)
        System.out.println("true");
    
  • 而如果,内部if条件 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");
于 2013-08-10T09:40:07.750 回答
2

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

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

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

也就是说,如果有else,它就是 的一部分if。都是一种说法。

没有错误的原因是因为这里没有歧义。(好吧,无论如何,不​​是编译器。)由于else是 的一部分if,它与最接近的if. 所以通过适当的缩进,你有

if (true)
    if (true)
       System.out.println("true");
    else
       System.out.println("false");
于 2013-08-10T09:40:27.493 回答
0

将此 IF 语句视为:

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

如果 first IFistrue它转到下一条语句,这里下一条语句也是 a IFtrue因此它也执行其中的语句。如果假设它是假的,那么它会搜索elseend 中的执行语句else。因此,所有语句都被覆盖,并且不会发生错误情况。

于 2013-08-10T09:43:20.320 回答