java - 为什么 switch 语句中的 case 没有自己的作用域?

标签 java switch-statement micro-optimization

<分区>

考虑这段代码:

int num = 0;

switch(num) {
   case 1:
      boolean bool = false;
      break;
   case 2:
      String one;
      String two;
      String three;
      //..simulating lots of vars
      break;
   default:
      bool = true;
      System.out.println(bool);
      break;
}

因为我们被允许引用在另一种情况下声明的变量,这意味着即使 case 1未被选中,boolean bool仍然被宣布。

default是最后一个选项,java 从左到右(从上到下)工作,我假设 case 2 中的变量(以及任何其他情况)也将被宣布。

这让我觉得在选择案例之前在案例中声明的代码越多,实际访问该案例所需的时间就越长选择的案例首先被宣布。

switch 语句以这种方式工作是否有特定原因?使用 if-else 不是最好的选择吗?如果有很多情况,而不是 switch 语句? (通话处理时间,纳秒)

最佳答案

{ } 代表一个范围,您可以按照自己喜欢的方式使用它。

在 switch 语句中:

switch (...) {
}

{ } 中的所有内容都属于同一范围。 如果你想让案例有自己的范围,你需要像这样使用 {}:

switch (...) {
    case 0: {
    }
    break;
    case 1: {
    }
    break;
}

同样,您可以使用 { } 在范围内声明范围,如下所示:

{
      {
          int i;
      }
      {
          int i;
      }
}

关于java - 为什么 switch 语句中的 case 没有自己的作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352762/

相关文章:

java - 如何在 SWT 中禁用组合框中的水平滚动条

java - 无法加载库 'xxx.dll' : Native library (win32-x86/xxx. dll) 在资源路径中找不到 (JNA + DLL + eclipse rcp)

java - Arquillian glassfish-managed 测试 Absent Code 属性错误

java - 将包含外部 CSS 的 SVG 转换为图像 java

c - 如何在c的case语句中使用省略号?

用于 switch case 的 C++ const 表达式成员

svn - 合并 SVN 存储库

php - 优化php中的大导入

java - 适用于 128 位 key 的非常快速的通用哈希函数

php - 应该使用 `if ($a != NULL)` 还是 `if ($a !== NULL)` 来控制程序流?