java 我不明白为什么这个带有switch语句的代码不会给出编译错误或抛出运行时异常[重复]

m4pnthwp  于 10个月前  发布在  Java
关注(0)|答案(1)|浏览(54)

此问题在此处已有答案

Declaring and initializing variables within Java switches(6个答案)
23小时前关闭

int param1 = 1;
        switch (param1){
            case 0:
                int block2 = 10; // if this line is commented gives a compilation error
                System.out.println(block2);
                break;
            case 1:
                block2 = 5; // if this line is commented below line gives a compilation error
                System.out.println(block2);
                break;
            default:
//                System.out.println(block2); // comilation error
        }

字符串
我尝试调试,但没有意义,因为我没有看到变量的声明。这段代码运行在一个main

nwo49xxi

nwo49xxi1#

这是switch表达式的一个怪癖。Java编译器允许你声明变量,并且如果它已经被初始化了,就可以引用它。这就是为什么你需要赋值它,所以为什么你的案例2给出了一个编译错误:它看到了case 0的声明,但是没有初始化,所以你不能引用它。
然而,这段代码令人困惑,你不应该这样写它。为每个case使用不同的变量。如果你这样做,像IntelliJ这样的IDE会生成一个警告:
在一个“switch”分支中声明并在另一个分支中使用的局部变量“block2”

相关问题