Why can't variables be declared in an if statement?

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