猿问

切换情况下的变量作用域

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


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


代码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”。


炎炎设计
浏览 360回答 3
3回答

呼啦一阵风

我将重复其他人所说的:每个case子句中变量的范围与整个switch语句相对应。但是,您可以使用大括号创建其他嵌套范围,如下所示:int key = 2;switch (key) {case 1: {    String str = "1";    return str;  }case 2: {    String str = "2";    return str;  }}现在,由于str每个case子句中命名的变量都在其自己的范围内,因此结果代码将成功编译。

鸿蒙传说

变量的范围是整个switch语句-所有情况和默认值(如果包括)。这是其他一些选择...选项1:int key = 2;switch (key) {case 1:     return "1";case 2:     return "2";}选项2:int key = 2;String str = null;switch (key) {case 1:     str = "1";     return str;case 2:     str = "2";     return str;}

小怪兽爱吃肉

我认为这是一个有效的问题,案件陈述的范围假设是不可避免的。进行自我调整是因为java编写器已使此方法不正确。例如,如果默认情况下语句处于范围的第一行,则比用break语句显式关闭大小写结尾的情况有什么问题。因此,在情况1中的声明在情况2中不可用,它具有并行作用域,但不嵌套。
随时随地看视频慕课网APP

相关分类

Java
我要回答