本人今天在编写工具类时,无心之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一个奇怪的问题。工具
废话少说,先列出例子,一看便知。编译器
情景一:case 1中声明变量x,case 2中不能再声明变量xit
switch (1) {编译
case 1:变量
int x = 1;block
break;cas
case 2:ab
int x = 2;// 编译器会提示:Duplicate local variable x
break;
}
如是,我猜想是否是由于case 1和case 2都在switch的块中,因此case 1和case 2共享本地变量。如是,我便提出第二种假设。
情景二:case 1中声明变量x,case 2中直接使用变量x
switch (2) {
case 1:
int x = 1;
break;
case 2:
System.out.println(x);// The local variable x may not have been initialized
break;
}
情景二的结果说明,case 1中x被提早声明,可是没有进行case 1中指定的赋值操做。初步能够得出结论,case语句中的局部变量声明会被提早。如是对情景二的代码稍加修改。
情景三:case 1声明x变量,case 2赋值并使用
switch (2) {
case 1:
int x = 1;
break;
case 2:
x = 2;
System.out.println(x);// 正常输出2
break;
}
因而可知,进一步证实case中声明局部变量的语句会被提早。