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