javaSwitch中的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;java switch case string
// 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块中定义相同变量名⽽出现编译不同过的情况,我们通常会加上{}(⽬前就知道这种情况,如果以后遇到了再补充)。
所以通常情况下是不必加上{}的。该怎么做就怎么做。朋友们如果有不同的意见欢迎指正,⼤家共同进步。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。