本人今天在編寫工具類時,無心之間發現,在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中聲明局部變量的語句會被提早。