有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

if语句如果在JAVA中没有花括号,为什么if块可以放在另一个if块中

通常在JAVA中,如果if语句没有花括号,则在满足if条件时只能执行一行,但是如果初始if后面有另一个if块(内部if),则不会触发错误,并且会有更多行。这怎么可能

范例

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

共 (4) 个答案

  1. # 1 楼答案

    将此if语句视为:

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

    如果第一个IFtrue,它会转到下一个语句,这里的下一个语句也是IF,也是true,因此它会执行其中的语句。如果假设为false,则搜索elseend执行else中的语句。所以所有语句都被覆盖了,没有出现错误场景

  2. # 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,

    更正。不带大括号的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. # 3 楼答案

    没有错误,因为它等于

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

    以及有效的语法

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

  4. # 4 楼答案

    这是因为您的外部if块实际上包含一条语句

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

      if (true)
          System.out.println("true");
      
    • 如果,内部if条件如果false,它等价于:

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

    尽管如此,省略if-else周围的大括号或循环确实是个坏主意,尤其是在嵌套块中这样做,可能会带来麻烦。仅仅因为它可以做到,并不意味着你应该做到

    看看没有括号的嵌套的^ {CD1>}块会变得丑陋,并且经常导致错误,考虑这个代码,你认为输出应该是什么?

    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");