switch 中 java 中的变量范围

scope of a variable in java in switch

我试图了解这在 Java.

中的 switch 语句中是如何有效的
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 中具有块作用域,那么在 def 的情况下 "i" 变量不应该是不可访问的吗?还是 case 不被视为 block ? 这个问题应该很多人都遇到过。

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

因为块是跟在 switch 语句之后的,而不是其中的每个 case:

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

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

如果你想重用这个变量,你可以在你的案例之后的一个块中定义它:

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