If you give
public class test
{
public static void main(String ar[])
{
if (true)
int i=0;
}
}
It’s not compiling but the same code with braces is:
public class test
{
public static void main(String ar[])
{
if (true)
{int i=0;}
}
}
What is the explanation?
Variable declarations can only be declared in blocks, basically.
Looks at the grammar for “statement” in the Java Language Specification – it includes Block, but not LocalVariableDeclarationStatement – the latter is part of the grammar for a block.
This is effectively a matter of pragmatism: you can only use a single statement if you don’t have a brace. There’s no point in declaring a variable if you have no subsequent statements, because you can’t use that variable. You might as well just have an expression statement without the variable declaration – and that is allowed.
This prevents errors such as:
which might look okay at first glance, but is actually equivalent to:
Personally I always use braces anyway, as it makes that sort of bug harder to create. (I’ve been bitten by it once, and it was surprisingly tricky to spot the problematic code.)