本文对分支结构switch应用进行了相应的测试,还对switch和if进行了相互重写,测试区别,给你一个不一样的switch理解。
switch分支结构的基础使用。
语法结构:switch(expr1)中,expr1是一个整数表达式, 整数表达式可以是int基本类型或Integer包装类型,byte,short,char都可以隐含转换为int,所以都可以,在jdk1.7后String也可以。switch 语句有至少一个 case 代码块和一个可选的 default 代码块。
switch(变量或者表达式){
case 1:方法体1;break;
case 2:方法体2;break;
case 3:方法体3;break;
case 4:方法体4;break;
default:
}
//练习,猜数字游戏
//要求。随机产生一个7以内的数字,与case匹配,匹配即停止。
int i=new Random().nextInt(7);
System.out.println("随机产生的数字为"+i);
switch (i) {
case 1://if(i==1)
System.out.println("匹配结果是"+i);
break;
case 2://if(i==2)
System.out.println("匹配结果是"+i);
break;
case 3:
System.out.println("匹配结果是"+i);
case 4:
System.out.println("匹配结果是"+i);
break;
case 5:
System.out.println("匹配结果是"+i);
break;
default:
System.out.println("匹配失败");
break;
//当一个case成立,从这个case向后穿透所有case,包括default,
//直到程序结束或者遇到break程序才结束。
- 进入switch结构,先比较i值与第一个case(也就是1)是否相等,然后比较第二个 case(value2)以此类推;
- 如果相等,switch 语句就执行相应 case 下的代码块,直到遇到最靠近的 break 语句(或者直到 switch 语句末尾);
- 如果没有符合的 case,则执行 default 代码块(如果 default 存在);
- 如果没有 break,程序将不经过任何检查就会继续执行下一个 case;
任何表达式都可以成为 switch 的参数
public static void main(String[] args) {
int a = 1;
switch (++a) {//表达式可以有多种方式,但必须保证类型与case后的类型一致,必须一致
case 2:
System.out.println("匹配成功");
break;
default:
System.out.println("匹配失败");
}
}
扩展
- 将switch结构重写成if结构
public static void main(String[] args) {
int i=5;
switch (5) {
case 1:
System.out.println( "1" );break;
case 2:
case 3:
case 4:
case 5:
System.out.println("5");break;
default:
System.out.println( "匹配失败" );
}
}
- 重写成if结构
public static void main(String[] args) {
int i=5;
if(i==1) {
System.out.println( "1" );
}
else if(i==2) {}
else if(i==3) {}
else if(i==4) {}
else if(i==5) {
System.out.println("5");
}else {
System.out.println( "匹配失败" );
}
}
选择问题,以下是引用大神的原话,研究半天愣是不会,未来还需要补充,暂留
switch 的判断条件是 5 个时,性能比 if 高出了约 2.3 倍,而当判断条件的数量越多时,他们的性能相差就越大。而 switch 在编译为字节码时,会根据 switch 的判断条件是否紧凑生成两种代码:tableswitch(紧凑时生成)和 lookupswitch(非紧凑时生成),其中 tableswitch 是采用类似于数组的存储结构,直接根据索引查询元素;而 lookupswitch 则需要逐个查询或者使用二分法查询,因此 tableswitch 的性能会比 lookupswitch 的性能高,但无论如何 switch 的性能都比 if 的性能要高。
大家好,我是27岁小学生liu__peng
2020.12.25 23:06版本