我有一个关于Java交换机的疯狂问题.
int key = 2;
switch (key) {
case 1:
int value = 1;
break;
case 2:
value = 2;
System.out.println(value);
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
场景1 - 当它key为2时,它成功地将值打印为2.
场景2 - 当我要在其中发表评论value = 2时case 2:,说出该局部变量值可能尚未初始化.
问题:
场景1:如果执行流程没有进入case 1:(当时key = 2),那么它如何知道值变量的类型为int?
场景2:如果编译器知道值变量的类型int,则必须访问.中的int value = 1;表达式case 1:.(声明和初始化).那么为什么sqawrk当我要评论value = 2时case 2:,说本地变量值可能没有被初始化.
我想我不明白示波器如何在开关盒中工作.
有人可以向我解释为什么第一个代码不编译但第二个代码没有编译?
代码1:
int key = 2;
switch (key) {
case 1:
String str = "1";
return str;
case 2:
String str = "2"; // duplicate declaration of "str" according to Eclipse.
return str;
}
Run Code Online (Sandbox Code Playgroud)
代码2:
int key = 2;
if (key == 1) {
String str = "1";
return str;
} else if (key == 2) {
String str = "2";
return str;
}
Run Code Online (Sandbox Code Playgroud)
为什么变量"str"的范围不包含在案例1中?
如果我跳过案例1的声明,则永远不会声明变量"str"...