The following Java code does not compile.
int a = 0;
if(a == 1) {
int b = 0;
}
if(a == 1) {
b = 1;
}
Why? There can be no code path leading to the program assigning 1 to b
without declaring it first.
It occurred to me that b
's variable scope might be limited to the first if
statement, but then I wouldn't understand why. What if I really don't want to declare b
needlessly, in order to improve performance? I don't like having variables left unused after declaration.
(You may want to argue than I could simply declare b in the second if
statement, in that case, just imagine that it could be in a loop somewhere else.)
It is a local variable and is limited to the {} scope.
Try this here.
you have declared b variable inside if block that is not accessible out side the if block and if you want to access then put outside if block
variable b's scope is only until the if block completes, as this is where you declared the variable. That is why it cannot be accessed on the following block. This is for memory allocation, otherwise they would be ALOT of variables floating around in the memory.
Just for completeness sake: this one works as well (explanation is scoping, see the other answers)
Due to scoping, b will only be accessible inside the if statements. What we have here are actually two variables, each of which is just accessible in their scope.
{ }
is used to define scope of variables.And here you declared :So here scope of b will be only in
{ }
.So you are using variable b outside{ }
, it is giving compilation error.You can also refer this:
http://docs.oracle.com/javase/tutorial/java/javaOO/variables.html
This
{ }
defines a block scope. Anything declared between{}
is local to that block. That means that you can't use them outside of the block. However Java disallows hiding a name in the outer block by a name in the inner one. This is what JLS says :