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:
if (someCondition)
int x = 0;
System.out.println(x);
which might look okay at first glance, but is actually equivalent to:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
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.)
Since you are defining a variable inside if block you need to have brackets.
But below code will compile with a compiler warning.
int i;
if(true)
i = 0;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With