代码之家  ›  专栏  ›  技术社区  ›  Nazerke

空块和带有的块;仅在if语句中

  •  -2
  • Nazerke  · 技术社区  · 10 年前

    我一直在用JavaSE7程序员1学习指南中的测试测试自己。有一个关于if语句的问题。它询问哪个选项不会编译:

    >      a) if(true) ;
    >      b) if(true) {}
    >      c)if(true) {;}
    >      d)if(true) {;;}
    >      e)if (true) ;{};
    >      f) all of them will compile
    

    答案是f。我无法理解或解释为什么答案c、d和e会编译。

    2 回复  |  直到 10 年前
        1
  •  3
  •   user4566881 user4566881    10 年前

    这个想法是 ; 算作有效的独立语句,并且 {} 是有效的独立代码块。因此,当解析其中任何一个时,它们都将是有效的代码。他们什么都不做。

        2
  •  2
  •   TheLostMind    10 年前

    选项C、D和E有效。他们都是 忽略 编译器 .

    public static void main(String[] args) {
        if(true) {;} // a valid empty statement inside a code block --> valid
        if(true){;;} // 2 valid empty statements inside a code block --> valid
        if(true);{}; // a valid empty statement followed by an empty codeblock followed by another valid empty / dummy statement.
    } 
    

    他们都这么做 没有什么 。编译器将它们全部删除。

    注: if(true) 被编译器忽略,但 while(true) 现在和将来都将作为 goto 语句。

    字节码:

     public static void main(java.lang.String[]);
       flags: ACC_PUBLIC, ACC_STATIC
       Code:
         stack=0, locals=1, args_size=1
            0: return   --> Where on earth are my if conditions?