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

时间: 2024-11-03 21:22:48

在switch中的case语句中声明变量会被提前的相关文章

Switch Case语句中多个值匹配同一个代码块的写法

switch ($p) { case 'home': case '': $current_home = 'current'; break; case 'users.online': case 'users.location': case 'users.featured': case 'users.new': case 'users.browse': case 'users.search': case 'users.staff': $current_users = 'current'; break

C语言中switch...case语句中break的重要性

在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf("apple"); break; case 2:printf("banana"); break; case 3:printf("orange"); break; case 4:printf("pear"); break; cas

switch case语句中能否作用在String,long上

在之前的eclipse中使用switch的case语句时是只能为(byte,short,char)int类型或枚举类型.但在jdk1.7以后 在case语句中是可以使用String 以及long 等类型的 然后再控制台输入"好"之后 跟据所提供的值对应输出了case值.所以String,long可以作用在switch当中 原文地址:https://www.cnblogs.com/JXun/p/9338583.html

shell中的case语句

shell中case语法如下: case word in pattern1) Statement(s) to be execute if pattern1 matchs ;; pattern2) Statement(s) to be execute if pattern2 matchs ;; pattern3) Statement(s) to be execute if pattern3 matchs ;; *) Default action ;; esac [注]pattern模式不能包含元字

在 case 语句中使用字符串

在 case 语句中使用字符串 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法. 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;

关于case语句中声明变量并初始化的注意事项

今天看到一句对这个问题特别精辟的总结,记录如下: It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point whe

[sql]在case语句中不同情况下then的数据的数据类型不一致ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR 00932. 00000 -  "inconsistent datatypes: expected %s got %s" 1 CASE XXXXX.FILE_TYPE 2 WHEN '0' THEN NVL(TX_CNT,0) 3 ELSE XXXXX.TOT_TX_CNT 4 END ACT_TX_CNT, TX_CNT为NUMBER型,是GROUP BY 后的计数

PDO中捕获SQL语句中的错误

使用默认模式-----PDO::ERRMODE_SILENT 在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作. 例如: 通过prepare()和execute()方法向数据库中添加数据,设置PDOStatement对象的erroCode属性,手动检测代码中的错误,操作步骤如下. $dbms='mysql';//数据库类型 $dbName='admin';//使用的数据库 $user='root';//数据库连接用户名 $pwd='password';/

ThinkPHP3.2.3中,查询语句中in的使用方法。

//删除分类 public function del(){ $cid = I('get.cid'); $cate = M('category')->field('cid,pid')->select(); $cate = $this->son_cate($cate,$cid); $cate[] = $cid;//$cate为一个数组 $where['cid'] = array('in',$cate);//cid在这个数组中, M('category')->where($where)-