java不带大括号_java 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的{}内。 case2中的value1的作用域为switch的{}内。两个变量的作用域不同,当然可以定义相同的变量名称了。

片段3中的两个value的作用域分别为:case1中的value1的作用域为case 1的{}内, case2中的value1的作用域为case 2的{}内,所以两个作用域互不交叉,因此编译能够通过。

注意:switch()的{}外面有一个value变量名,此时你不能在case 的{}中定义变量名称为value的 变量,因为switch()的{}外的value变量的作用域包含了case{}内的作用域,

所以现在大家知道case中加上{}和不加{}有什么不同了吗?这里我就不说了,大家自己理解。下面说一下使用场合。

使用场合:为了防止在case块中定义相同变量名而出现编译不同过的情况,我们通常会加上{}(目前就知道这种情况,如果以后遇到了再补充)。

所以通常情况下是不必加上{}的。该怎么做就怎么做。

朋友们如果有不同的意见欢迎指正,大家共同进步。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值