在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中声明局部变量的语句会被提早。

相关文章
相关标签/搜索