这个问题已经在这里有了答案:????????????>????????????Declaring and initializing variables within Java switches????????????????????????????????????5个
我发现这种情况有点奇怪:
int x = 1;
switch(x){
case 0 :
boolean b = false;
break;
case 1 :
b = true; //will compile just right
System.out.println(b); //will print true
break;
default:
System.out.println(b); //will not compile
}
我只是觉得这很混乱.据说可以在整个代码块中访问局部变量.当然,b在一个switch块内,因此我可以理解,在不同情况下它是可访问的,即使这似乎与可能无法通过第一种情况的开关流程相矛盾,因此可能无法声明和初始化b.
但是,这是否又再次矛盾b同时在默认分支中仍不可访问?
是否在case分支中对本地变量声明进行特殊执行,无论是否匹配大小写,该分支都会运行?如果是,那么为什么默认分支无法访问它?
编辑重复标记:这里的问题不是关于case分支中声明的变量如何不是局部的(如上所述),而是为什么在case外部声明的局部变量为什么可以在其外部访问,而不是值它已经初始化过了.