在switch中的case语句中声明变量会被提前

Posted ieayoio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在switch中的case语句中声明变量会被提前相关的知识,希望对你有一定的参考价值。

原文链接: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中声明局部变量的语句会被提前。

以上是关于在switch中的case语句中声明变量会被提前的主要内容,如果未能解决你的问题,请参考以下文章

在switch语句中声明变量[重复]

在 case 块中声明变量时,C++11 未正确执行 switch

switch语句 switch语句的相关知识

switch的用法

S1/C#语言和数据库技术基础/02-C#语法快速热身

JavaScript------- Switch 语句