java - Java开关控制中的局部变量
问题描述
我发现这个案例有点奇怪:
int x = 1;
switch(x){
case 0 :
boolean b = false;
break;
case 1 :
b = true; //will compile just right
System.out.println(b); //will print true
break;
default:
System.out.println(b); //will not compile
}
我只是觉得这很令人困惑。局部变量据说可以在整个代码块中访问。当然,b
在 switch 块中,所以我可以理解它在不同的情况下可以访问,即使这似乎与 switch 流程相矛盾,它可能不会通过第一种情况,因此可能不会声明和初始化b
。
b
但是,如果默认分支中仍然无法访问同时,这是否又矛盾了?
案例分支中的局部变量声明是否有任何特殊执行,无论案例是否匹配,它都会运行?如果是,那么为什么默认分支不能访问它?
编辑重复标志:这里的问题不是关于在 case 分支中声明的变量如何不是本地的(正如我上面提到的),而是为什么在 case 中声明的局部变量可以在它之外访问,而不是值它已被初始化。
发现了一个类似的问题,我相信它可以回答我的问题:Declaring and initializing variables within Java switch
解决方案
关键是默认情况意味着:没有采取其他情况。
switch 构造允许您在其整体范围内拥有局部变量,但仍然每个“读取”都必须看到之前的“写入”。
并且编译器可以很容易地检测到默认情况下没有看到b的初始化。
除此之外,您可以在不同情况下进行此类分配的原因是:整个 switch 语句只有一个“switch 块”。
有关详细信息,请参阅Java 语言规范!
推荐阅读
- git - How to stop tracking the content of a directory in git?
- bigdata - Pentaho Dashboard Performance
- c# - 为什么 IF 语句遍历所有 AND 条件,即使第一个为假
- android - 未收到 FCM 通知
- javascript - navigate to particular url in a href ng-click
- spring - Spring Config server: Truststore not found Resource location must not be null
- typescript - TypeScript 查找/条件类型和联合
- c# - 如何在c#中按大小写排序数据表
- node.js - 在 Node JS 中将注册用户保存到 MongoDB 的问题 - Express 应用程序
- java - 从 java 应用程序运行 cmder.exe 时出现问题