zoukankan      html  css  js  c++  java
  • 在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中声明局部变量的语句会被提前。

  • 相关阅读:
    JavaScript Date对象
    BOM 和 DOM
    JS变量声明方式
    CSS3 选择器
    Python文件操作
    第十三章 迭代器、生成器、 装饰器
    python专题 --- 递归
    React JSX
    ES6——面向对象应用
    ES6——面向对象-基础
  • 原文地址:https://www.cnblogs.com/ieayoio/p/5315808.html
Copyright © 2011-2022 走看看