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

2022-09-01 18:12:35

以下 Java 代码无法编译。

int a = 0;

if(a == 1) {
    int b = 0;
}

if(a == 1) {
    b = 1;
}

为什么?在没有事先声明的情况下,不能有代码路径导致程序分配 1。b

我突然想到,变量范围可能仅限于第一个语句,但后来我不明白为什么。如果我真的不想为了提高性能而进行不必要的声明,该怎么办?我不喜欢在声明后未使用变量。bifb

(你可能想争论,而不是我可以简单地在第二个语句中声明b,在这种情况下,想象一下它可能在其他地方的循环中。if


答案 1

变量可以在条件语句中声明。但是,您尝试在不同的范围内进行访问。b

当您在此处声明 b 时:

if(a == 1) {
    int b = 0;
}

它仅在范围之内,直到最后。}

因此,当您来到这条线上时:

b = 1;

b不存在。


答案 2

为什么?在没有事先声明的情况下,不能有代码路径导致程序将 1 赋给 b。

你是对的,但编译器不知道这一点。编译器不执行代码。编译器仅转换为字节码而不计算表达式。