模糊条件Java语法

时间:2011-03-02 15:12:47

标签: java syntax if-statement conditional-operator

我们刚刚找到了一位同事和我,用 If 条件语法编写了一个奇怪的编译语法:

if (true); {
  foo();
}

这里是否有人向我们解释这种奇怪的语法? THX。

7 个答案:

答案 0 :(得分:8)

对我来说,它看起来像一个带有空体的if语句,后跟一个始终执行的代码块(与if语句无关)。例如,foo也在这里执行:

if (false); {
    foo();
}

答案 1 :(得分:6)

第一部分if (true);只是一个以;结尾的无操作条件。其余的是在新范围块内调用foo()。您应该会发现始终会调用foo()

答案 2 :(得分:4)

这没有任何实际意义,但在语法上是正确的。它也可以写成

if (true) 
{    
    // do nothing 
}
{   
    foo(); 
}

围绕foo()的{};在这种情况下没有任何意义如果定义了变量,它将限制在{}内定义的变量的范围。

{
   int i=0;
   System.out.println(i);
}
{
   String i="hello";
   System.out.println(i);
}

工作正常。

答案 3 :(得分:1)

我认为这相当于

if (true) {};
foo();

因为if语句在分号后结束,而foo语句刚刚放在一个块({})中 ...

答案 4 :(得分:1)

如果或者有人计划稍后写一个条件但从未做过这样的事情,可能会留下旧的调试......

我认为你可以安全地删除这个if语句,这样做绝对没有意义。

答案 5 :(得分:1)

正如其他人所指出的那样,语法上它是一个带有空执行语句的条件(即什么都不做),然后调用包含在范围括号内的foo()。 foo()总是被执行。实际上,如果您在实际案例中发现了这一点,而不是编程测试,我怀疑其中一个:

  1. 这是一个印刷错误,在这种情况下应该更正(当你发现代码应该做什么时)
  2. 这是一段故意模糊的代码,旨在使读者感到困惑,在这种情况下,它应该被修复(替换为“foo();”)并且应该追捕犯罪者并谴责
  3. 它是由(差的)自动源代码生成器生成的,在这种情况下应该注释它以表示
  4. 从调试会话中遗留下来,在这种情况下,它应该恢复到更改之前的状态

答案 6 :(得分:0)

这是死代码。 if块无用。

相当于

if(doesn't matter whats here) {}
foo();