java的case后⾯可以加符合吗_javaSwitch中的case后⾯加上
⼤括号({})。。。
switch case判断字符串java基础求真之switch 的case 后⾯加上⼤括号和不加⼤括号的区别。
下⾯给出三段代码⼤家看⼀下有什么不同以及哪段代码能够编译通过那段代码编译不能通过,为什么?(Why?)
代码⽚段⼀:
int value = 10;
switch (value) {
case 1:
int value1 = 5;
break;
case 2:
int value1 = 6;
break;
}
代码⽚段⼆:
int value = 10;
// switch
switch (value) {
case 1: {
int value1 = 5;
break;
}
case 2:
int value1 = 8;
break;
}
代码⽚段三:
int value = 10;
// switch
switch (value) {
case 1: {
int value1 = 5;
break;
}
case 2: {
int value1 = 8;
break;
}
}
}
好了,三段代码都已经给出了,⼤家看出来那段代码能够编译通过?那段代码编译不同断过了吗?
猛地⼀看似乎没有多⼤的区别,不就是case后⾯加上{}和不加上⼤括号的区别吗?
好吧,废话不多说了,我这边公布答案:⽚段1:不能通过编译器的编译,⽚段2和⽚段3可以通过编译器的编译。但是为什么呢?这是⼀个问题。
想要弄明⽩这个问题,就要先弄明⽩Java总变量的作⽤域问题。我们都知道在java(其他语⾔也是如此例如:C/C++/java/C#等)中同⼀个作⽤域中不能有两个相同的变量名称,(因为如果两个变量名相同容易造成混淆,编译器不知道到底该⽤那个变量)。
⽚段1中的两个value1的作⽤域都在switch的{}内。根据“同⼀个作⽤域中
不能有两个名称相同的变量名”的出⽚段1肯定不能编译通过
⽚段2中的两个value1的作⽤域分别为:case 1:中的value1的作⽤域为case1的{}内。
case 2中的value1的作⽤域为switch的{}内。两个变量的作⽤域不同,当然可以定义相同的变量名称了。
⽚段3中的两个value的作⽤域分别为:case 1中的value1的作⽤域为case 1的{}内,
case 2中的value1的作⽤域为case 2的{}内,所以两个作⽤域互不交叉,因此编译能够通过。
注意:switch()的{}外⾯有⼀个value变量名,此时你不能在case 的{}中定义变量名称为value的
变量,因为switch()的{}外的value变量的作⽤域包含了case{}内的作⽤域,
所以现在⼤家知道case中加上{}和不加{}有什么不同了吗?这⾥我就不说了,⼤家⾃⼰理解。下⾯说⼀下使⽤场合。
使⽤场合:为了防⽌在case块中定义相同变量名⽽出现编译不同过的情况,我们通常会加上{}(⽬前就知道这种情况,如果以后遇到了再补充)。
所以通常情况下是不必加上{}的。该怎么做就怎么做。
朋友们如果有不同的意见欢迎指正,⼤家共同进步。
在switch中的case语句中声明变量编译出错的解决⽅案
在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = [i]; ...
在switch中的case语句中声明变量会被提前
switch中的case不加break执⾏情况
输出结果:230 分析,switch先匹配⼀个case满⾜$a,然后执⾏case⾥⾯的语句,直到遇到break,否则⼀直往下执⾏ <?php $a = ; switch($a){ : echo ...
java 泛型中 T、E ... 和 问号(通配符)的区别
⼀.泛型中T.E ... 是泛型类.泛型⽅法定义时候⽤的. 1.泛型类定义在类后⾯ 紧跟类名后⾯ public class TestClassDefine{} 2.泛型⽅法定义在⽅ ...
关于引⽤类型作为参数加上ref与不加ref的区别
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
C+&plus;中创建对象的时候加括号和不加括号的区别
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
C+&plus;中创建对象的时候加括号和不加括号的区别&lpar;转)
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
Java继承中的转型及其内存分配
看书的时候被⼀段代码能凌乱啦,代码是这样的: package 继承; abstract class People { public String tag = "疯狂Java讲义"; ...
Java 7 中的Switch 谈 Java版本更新和反编译知识
Java 7 中的Switch 谈 Java版本更新和反编译知识 学习编程,享受⽣活,⼤家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...
随机推荐
dfs判断连通图(⽆向)
在图论中,连通图基于连通的概念.在⼀个⽆向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也⼀定有路径),则称vi和vj是连通的.如果G 是有向图,那么连接vi和vj的路径中所有的边都 ...
移动端HTML5资源整理
⽬录 meta基础知识 H5页⾯窗⼝⾃动调整到设备宽度,并禁⽌⽤户缩放页⾯ 忽略将页⾯中的数字识别为电话号码 忽略Android平台中对邮箱地址的识别 当⽹站添加到主屏幕快速启动⽅式,可隐藏地址栏,仅 ...
[ionic开源项⽬教程] - 第11讲 封装BaseController实现controller继承
关注:TongeBlog,可查看[ionic开源项⽬]全套教程. 截⽌到第10讲,tab1[健康]模块的功能基本已经完成了,但这⼀讲中,controller 层⼜做了较⼤的改动,因为下⼀讲中t ...
Win7怎么录制电脑屏幕视频
我们在看视频的时候,经常会看到⾃⼰特别喜爱的视频,想要把其中的某些⽚段给录制下来,那么Win7怎么录制电脑屏幕视频?其实步骤很简单,下⾯就来分享下具体的步骤. 使⽤⼯具: 电脑 操作⽅法: 第⼀步.⾸ ...
window 系统虚拟机安装mac系统
前⾔: 我们⽤的是虚拟机,物理机安装⼀是复杂,⼆是兼容性实在太差,所以不推荐使⽤,除⾮你的电脑配置不够.这篇⽂章很长,如果想安装的话建议收藏,否则你有可能记不住步骤,我尽量缩减步骤,所以如果你想安装⿊ ...
区块链共识机制:POW、POS、DPOS、PBFT、POOL
共识机制作为区块链的关键技术之⼀,在业务吞吐量.交易速度.不可篡改性.准⼊门槛等等⽅⾯发挥重
要的作⽤. 区块链是去中⼼化的,没有中⼼记账节点,所以需要全⽹对账本达成共识.⽬前有POW.POS.DPOS ...
BZOJ.4832.[Lydsy1704⽉赛&rsqb;抵制克苏恩&lpar;期望DP)
题⽬链接 \(f[s][i][j][k]\)表⽰还剩\(s\)次攻击,分别有\(i,j,k\)个⾎量为\(1,2,3\)的奴⾪主时,期望受到伤害. 因为期望是倒推,所以这么表⽰从后往前求,注意\(a, ...
Kafka⽹络模型分析
Kafka基于⾼吞吐率和效率考虑,并没有使⽤第三⽅⽹络框架,⽽且⾃⼰基于java nio封装的,总体⽹络模型如下: Broker的内部按照SEDA模型处理⽹络请求,处理过程如下: Accept Thr ...
array2xml xml2array
array2xml/** * * 将简单数组转化为简单的xml * @param string $data 要进⾏转化的数组 * @param string $tag ... Tomcat的运⾏模式
tomcat的三种运⾏模式 tomcat Tomcat Connector的三种不同的运⾏模式性能相差很⼤,有⼈测试过的结果如下: 这三种模式的不同之处如下: ●BIO: ⼀个线程处理⼀个请求.缺 ...
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论