为什么在一个案例标签在其他案例中可用后声明对象?

bir*_*rdy 6 java

可能重复:
交换机案例中的可变范围

我有这样的代码:

switch(a) {
case b:
 Object o = new Object();
 return o;
case c:
 o = new Object();
 return o;
 }
Run Code Online (Sandbox Code Playgroud)

而且我很有意思为什么在第二个案例标签之后可以使用在第一个案例标签之后声明的变量,即使永远不会达到第一个州?

Tik*_*vis 2

尽管情况不同,但语句的局部变量switch位于同一块中,这意味着它们位于同一范围内。

据我所知,Java 中的新作用域仅在新的代码块中创建。一段代码(多于一行)必须用大括号括起来。switch 语句的情况下的代码没有大括号括起来,因此它是整个语句范围的一部分。

但是,您实际上可以通过添加花括号向语句引入新的作用域:

switch (cond) {
case 1:{
     Object o = new Object();
}
    break;
case 2:{
    // Object o is not defined here!
}
    break;
}
Run Code Online (Sandbox Code Playgroud)