Phi*_*ere 91 java switch-statement
我想我不明白示波器如何在开关盒中工作.
有人可以向我解释为什么第一个代码不编译但第二个代码没有编译?
代码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;
}
Run Code Online (Sandbox Code Playgroud)
代码2:
int key = 2;
if (key == 1) {
String str = "1";
return str;
} else if (key == 2) {
String str = "2";
return str;
}
Run Code Online (Sandbox Code Playgroud)
为什么变量"str"的范围不包含在案例1中?
如果我跳过案例1的声明,则永远不会声明变量"str"...
Ric*_*ook 163
我将重复其他人所说的内容:每个case子句中变量的范围对应于整个switch语句.但是,您可以使用大括号创建更多嵌套范围,如下所示:
int key = 2;
switch (key) {
case 1: {
String str = "1";
return str;
}
case 2: {
String str = "2";
return str;
}
}
Run Code Online (Sandbox Code Playgroud)
由于str每个case子句中指定的变量都在自己的范围内,因此生成的代码现在将成功编译.
变量的范围是整个switch语句 - 所有情况和默认值(如果包含).
以下是其他一些选择......
选项1:
int key = 2;
switch (key) {
case 1:
return "1";
case 2:
return "2";
}
Run Code Online (Sandbox Code Playgroud)
选项2:
int key = 2;
String str = null;
switch (key) {
case 1:
str = "1";
return str;
case 2:
str = "2";
return str;
}
Run Code Online (Sandbox Code Playgroud)