java - 开关盒中的变量范围

标签 java switch-statement

我想我不明白范围在 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/

相关文章:

java - 并发进程向数据库中插入数据

java - 如何使用 jax -rs 创建 POST 请求

java - 使用 DateTimeFormatter 为 "early"日期格式化时间戳

没有声明和中断的情况

javascript - switch 语句给出了错误的月份如何修复?

java - Web服务获取股票报价?

java - 奇怪的循环输出 - Java

c - 如何在 C 中制作 !default 大小写

Java/Android : virtual dispatch, switch-case,或数组访问

javascript - 可以在 switch 表达式中使用数学运算符吗?