Java - switch 语句和大括号

Java - Switch statement and curly braces

我有一个与 switch-case 块中的花括号相关的问题

 switch( conditon ) { 

   case val1: {
      // something 
   }
   break;
   case val2: {
      // something 
   }
   break; 
   default:
   break;  
}

或类似这样的内容:

 switch( conditon ) { 

   case val1: {
      // something 
      break;
   }
   case val2: {
      // something 
      break;
   } 
   default:
   break;  
}

A 我知道这两个代码应该以相同的方式工作,但我认为这里有一些不合理之处。由于 break 应该导致从花括号块中跳出,所以理论上第二个代码应该像这样平滑: 1. break course 跳出街区 2. switch 继续执行 case val2 或 default 导致大括号外没有任何 break 语句。

您推荐使用哪个版本,它们的工作方式真的一样吗?

试试这个:

{
System.out.println("A");
break;
System.out.println("B");
}

你会看到

$ javac Y.java 
Y.java:35: error: break outside switch or loop
    break;
    ^
1 error

这意味着:你不能在方块中使用它,它与方块结合没有任何效果。

我不会将 break 放在块外,但我从未见过任何一种编码规则都要求如此(你可以为双方提出论据)。也许这是因为块不是很频繁地用于分隔每个开关分支的可见性。

大括号限制了变量的范围。并且除了 if、for、while、switch.. 块之外对流量控制没有影响,除非它们是可选的