为什么我们不能在 if 语句中声明变量?

gun*_*ker -39 java scope if-statement variable-assignment

我知道 Stack Overflow 上有这样的问题,但我想知道为什么我们不能在if语句内声明变量,这样我们就可以通过利用if作用域来节省空间。

例如,如果我写:

if (int i) {
    ...
} 
Run Code Online (Sandbox Code Playgroud)

i那么我只能在范围内使用if,但是如果我将其写在语句之外if,那么i变量应该在整个块的内存中。

Stu*_*ske 8

if ( int i ) => int i不是布尔表达式,所以这不起作用。

if ( booleanExpr ){
  int a = 5;
...
}
Run Code Online (Sandbox Code Playgroud)

这里 a 是 if 块中的局部变量。在 if 块的末尾,它被从堆栈中删除并且变得不可用。

int a = 5;
if ( booleanExpr){
  ...
}
Run Code Online (Sandbox Code Playgroud)

这里的 a 不是 if 块的局部变量,而是包含方法的局部变量。因此,在方法的整个执行过程中(从其声明开始)它将位于堆栈上。

a 也可以是类的实例或静态变量,那么它可以在类的每个方法中访问(但实例变量在静态上下文中不可访问)