为了账号安全,请及时绑定邮箱和手机立即绑定

切换情况下的变量作用域

切换情况下的变量作用域

炎炎设计 2019-12-03 14:58:48
我想我不明白示波器在切换情况下是如何工作的。有人可以向我解释为什么第一个代码不能编译而第二个代码可以编译吗?代码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”。
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

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


int key = 2;

switch (key) {

case 1: {

    String str = "1";

    return str;

  }

case 2: {

    String str = "2";

    return str;

  }

}

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


查看完整回答
反对 回复 2019-12-03
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

变量的范围是整个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;

}


查看完整回答
反对 回复 2019-12-03
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我认为这是一个有效的问题,案件陈述的范围假设是不可避免的。进行自我调整是因为java编写器已使此方法不正确。

例如,如果默认情况下语句处于范围的第一行,则比用break语句显式关闭大小写结尾的情况有什么问题。因此,在情况1中的声明在情况2中不可用,它具有并行作用域,但不嵌套。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 359 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信