空块和块;仅在if语句中

时间:2015-02-14 16:50:52

标签: java if-statement syntax conditional-statements

我在Java SE 7程序员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 个答案:

答案 0 :(得分:3)

这个想法是;计为有效的独立语句,{}是有效的独立代码块。因此,当解析其中任何一个时,它们将是有效的代码。他们只是不做任何事情。

答案 1 :(得分:2)

选项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.
} 

他们都做 NOTHING 。编译器将它们全部删除。

注意:编译器会忽略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?