switch语句语法
switch (expression) {case value://语句break;//可选//可以有任意个case语句default://可选//语句}
注意点
switch的语句中表达式expression返回类型只能是byte、char、short、int和枚举类型,java1.7开始支持String类型;
case语句值的类型必须与表达式expression的类型相同,并且是字面量或者是常量。
执行过程
从上到下进行匹配,一旦匹配到了,后面的语句块都执行,直到执行完或者遇到break;
案例分析
今天在牛客网上刷到一个题目,下面代码的输出结果是什么:
int v1 = 0, v2 = 0, v3 = 0, v4 = 0;String str = "1314520";char[] s = str.toCharArray();for (int i = 0; i < s.length; i++) {switch (s[i]) {default:v4++;case '1':v1++;case '2':v2++;case '3':v3++;}}System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);
结果是3,5,6,7,是不是跟你的结果完全不一样?
下面我们来分析程序的执行过程:
第一轮:s[i]=s[0]='1',会执行v1++;v2++;v3++;这时候v1=1,v2=1,v3=1,v4=0
第二轮:s[i]=s[1]='3',会执行v3++;这时候v1=1,v2=1,v3=2,v4=0
第三轮:s[i]=s[2]='1',会执行v1++;v2++;v3++;这时候v1=2,v2=2,v3=3,v4=0
第四轮:s[i]=s[3]='4',会执行v4++;v1++;v2++;v3++;这时候v1=3,v2=3,v3=4,v4=1
第五轮:s[i]=s[4]='5',会执行v4++;v1++;v2++;v3++;这时候v1=4,v2=4,v3=5,v4=2
第六轮:s[i]=s[5]='2',会执行v2++;v3++;这时候v1=4,v2=5,v3=6,v4=2
第七轮:s[i]=s[6]='0',会执行v4++;v1++;v2++;v3++;这时候v1=5,v2=6,v3=7,v4=3
所以最后System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);输出结果为3,5,6,7