java - java中switch中变量的作用域

标签 java switch-statement case

我试图理解这在 Java 中 switch 的 case 语句中是如何有效的。

switch(someValue){
    case abc: int i=0
    break;
    case def: int i=0 // error because i declared above is still accessible in this case.`

如果我们说变量在 Java 中具有 block 作用域,那么在 def 的情况下“i”变量不应该是不可访问的吗?或者案件没有被视为一个 block ? 这个问题想必很多人都遇到过。

为什么这没有违反任何编程的基本概念?

最佳答案

因为该 block 是 switch 语句之后的内容,而不是其中的每个 case:

switch (...) { // start of block
  case: ...
  break;
  ...
} // end of block

当在 for 循环中使用时,编写 break 并不会结束该 block ;同样,当在 switch 中使用时,编写 case 不会开始一个新 block 。将它们视为要在 block 内跳转的标签可能会有所帮助。

如果您想重用该变量,您可以在案例之后的 block 中定义它:

case abc: {int i=0 ...}
  break;

关于java - java中switch中变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040975/

相关文章:

c++ - 有没有一种好的方法来确保特定的switch语句处理所有枚举值?

c++ - 运行时切换选择

postgresql - 从 case 语句中解压表达式结果

mysql - 将一行的结果调整为其他行

java - 在java中验证基于linux的用户

java - 二叉树的递归代码流程

Java HttpsServer - 强制 TLSv1.1

java - 将鼠标监听器添加到 java swt 图像

c - 开关盒 - 意外行为

mysql - 如何在 CASE WHEN 的 ELSE 中进行查询?