在switch中的case語句中聲明變量

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

相關文章
相關標籤/搜索