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.)
Variables can be declared inside a conditional statement. However you try and access b
in a different scope.
When you declare b here:
if(a == 1) {
int b = 0;
}
It is only in scope until the end }
.
Therefore when you come to this line:
b = 1;
b
does not exist.
Why? There can be no code path leading to the program assigning 1 to b without declaring it first.
You are right, but the compiler doesn't know that. The compiler does not execute the code. The compiler only translates to bytecode without evaluating expressions.
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 :
The scope of a local variable declaration in a block (§14.2) is the rest of the block in which the declaration appears, starting with its own initializer (§14.4) and including any further declarators to the right in the local variable declaration statement.
The name of a local variable v may not be redeclared as a local variable of the directly enclosing method, constructor or initializer block within the scope of v, or a compile-time error occurs.
Its all about java variable scoping.
You'll need to define the variable
outside of the if statement
to be able to use it outside.
int a = 0;
int b = 0;
if(a == 1) {
b = 1;
}
if(a == 1) {
b = 2;
}
See Blocks and Statements
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
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