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

Java 为什么在一个案例标签后声明的对象在其他案例标签中可用?,java,Java,可能重复: 我有这样一个代码: switch(a) { case b: Object o = new Object(); return o; case c: o = new Object(); return o; } 我很感兴趣的是,为什么在第二个语句中可以使用在第一个case标签之后声明的变量,即使永远不会达到第一个状态?尽管在不同的情况下,switch语句的局部变量在相同的块中,这意味着它们在相同的范围内 据我所知,Java中的新作用域只在新的代码块中创建。代码块(包含多行代码

可能重复:

我有这样一个代码:

switch(a) {
case b:
 Object o = new Object();
 return o;
case c:
 o = new Object();
 return o;
 }

我很感兴趣的是,为什么在第二个语句中可以使用在第一个case标签之后声明的变量,即使永远不会达到第一个状态?

尽管在不同的情况下,
switch
语句的局部变量在相同的块中,这意味着它们在相同的范围内

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

但是,您实际上可以通过添加大括号为语句引入一个新范围:

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

这是一份完全相同的副本,因此违反了SO的规则。羞耻!:)@简-如果不知道“范围”这个词,可能很难找到它。不感到羞耻。:)好的,收回“羞耻”这个词。问重复的问题不是犯罪,特别是如果问题的措辞不同。现在告诉我,你没有把它从一个伪装成重复的问题上复制过来:)我在看到评论之前就已经发布了。也就是说,我应该去那里看看是否还有什么东西可以偷;)