模糊条件Java语法
我和一位同事刚刚发现了一种奇怪的编译语法,使用了If条件语法:模糊条件Java语法,java,syntax,if-statement,conditional-operator,Java,Syntax,If Statement,Conditional Operator,我和一位同事刚刚发现了一种奇怪的编译语法,使用了If条件语法: if (true); { foo(); } 这里有人向我们解释这种奇怪的语法吗?Thx.对我来说,它看起来像是一个带有空主体的if语句,后跟始终执行的代码块(与if语句无关)。例如,foo是否也在此处执行: if (false); { foo(); } 我认为这与 if (true) {}; foo(); 因为if语句是在分号和foo语句刚刚放在块({})中之后结束的 …可能是旧调试的遗留问题,或者有人计划稍后编写
if (true); {
foo();
}
这里有人向我们解释这种奇怪的语法吗?Thx.对我来说,它看起来像是一个带有空主体的if语句,后跟始终执行的代码块(与if语句无关)。例如,foo是否也在此处执行:
if (false); {
foo();
}
我认为这与
if (true) {};
foo();
因为if语句是在分号和foo语句刚刚放在块({})中之后结束的
…可能是旧调试的遗留问题,或者有人计划稍后编写条件,但从未这样做
我认为您可以安全地删除这个if语句,这样做绝对没有意义。第一部分,
if(true)
只是一个不做任何事情的条件,以结尾代码>。其余部分是在新的作用域块内调用foo()
。您应该发现总是调用foo()
。这是死代码。if块是无用的
相当于
if(doesn't matter whats here) {}
foo();
这没有真正意义,但在语法上是正确的。它也可以写成
if (true)
{
// do nothing
}
{
foo();
}
用{}环绕foo();在这种情况下没有任何意义。如果定义了变量,它将限制{}中定义的变量的范围
{
int i=0;
System.out.println(i);
}
{
String i="hello";
System.out.println(i);
}
工作正常。正如其他人所指出的,从语法上讲,它是一个条件语句,包含一个空的执行语句(即不执行任何操作),然后是一个对foo()的调用,包含在范围括号内。foo()始终被执行。实际上,如果您在实际案例中发现了这一点,而不是在编程测试中,我怀疑以下情况之一:
这是一个印刷错误,在这种情况下,它应该被纠正(当你发现代码应该做什么时)
这是一段故意模糊的代码,旨在迷惑读者,在这种情况下,应该对其进行修复(替换为“foo();”),并且应该追捕并谴责肇事者
它是由(糟糕的)自动化源代码生成器生成的,在这种情况下,应该对其进行注释以表明
它是调试会话遗留下来的,在这种情况下,它应该恢复到进行更改之前的状态
如果(我们正在打仗);{launch_all_nukes();}:DDON不管这里有什么?如果它抛出异常怎么办?e、 g.if(Long.parseLong(“我不是长”)1{}foo()代码>:-)