原文链接:http://my.oschina.net/u/2000201/blog/514384
本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一个奇怪的问题。
废话少说,先列出例子,一看便知。
情景一:case 1中声明变量x,case 2中不能再声明变量x
switch (1) {
case 1:
int x = 1;
break;
case 2:
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中声明局部变量的语句会被提前。