我在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会编译。
答案 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?