开关案例中变量的范围

菲利普·卡里尔(Philippe Carriere):

我想我不明白示波器在切换情况下是如何工作的。

有人可以向我解释为什么第一个代码不能编译而第二个代码可以编译吗?

代码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;
 }

情况1为何不包含变量“ str”的范围?

如果我跳过情况1的声明,则永远不会声明变量“ str”。

理查德·库克(Richard Cook):

我将重复其他人所说的:每个case子句中变量的范围与整个switch语句相对应但是,您可以使用大括号创建其他嵌套范围,如下所示:

int key = 2;
switch (key) {
case 1: {
    String str = "1";
    return str;
  }
case 2: {
    String str = "2";
    return str;
  }
}

现在,由于str每个case子句中命名的变量都在其自己的范围内,因此结果代码将成功编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章