我想我不明白范围在 switch case 中是如何工作的。
有人能解释一下为什么第一个代码不能编译,而第二个代码可以吗?
代码 1:
int key = 2;
switch (key) {
case 1:
String str = "1";
return str;
case 2:
String str = "2"; // duplicate declaration of "str" according to Eclipse.
return str;
}
代码 2:
int key = 2;
if (key == 1) {
String str = "1";
return str;
} else if (key == 2) {
String str = "2";
return str;
}
变量“str”的作用域怎么不包含在案例1中?
如果我跳过案例 1 的声明,则永远不会声明变量“str”...
最佳答案
我将重复其他人所说的:每个 case
子句中的变量范围对应于整个 switch
语句。但是,您可以使用大括号创建更多嵌套范围,如下所示:
int key = 2;
switch (key) {
case 1: {
String str = "1";
return str;
}
case 2: {
String str = "2";
return str;
}
}
现在生成的代码将成功编译,因为每个 case
子句中名为 str
的变量都在其自己的范围内。
关于java - 开关盒中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894119/